tx · 9aKgg1s6G6M8LggGuanE44ip2HmKyDdX1eSzcVdUr6Cn

3MzDGFvPnXVbA4wCacqcVnfVJPwG952KVAg:  -0.01400000 Waves

2022.01.31 23:20 [1903585] smart account 3MzDGFvPnXVbA4wCacqcVnfVJPwG952KVAg > SELF 0.00000000 Waves

{ "type": 13, "id": "9aKgg1s6G6M8LggGuanE44ip2HmKyDdX1eSzcVdUr6Cn", "fee": 1400000, "feeAssetId": null, "timestamp": 1643660431334, "version": 2, "chainId": 84, "sender": "3MzDGFvPnXVbA4wCacqcVnfVJPwG952KVAg", "senderPublicKey": "CViCXhHrygDDAtVc1uFczxe6ANj9tBz5PGQDS1yWZqgy", "proofs": [ "3kfNfa42guuESCdj5zLPbCJMNxDToG9JjECLYMnspZxbeMvk1ENnk5GKNQrEB8AhhfiVQUfnSeivuEojVvS5pvor", "3HZBM7eRuXtMbn67K723JizjbaWGmceTJVxwJuVhb6fhso2A3P3XWmratwXvMVWPdSDnafmVQiHjuHq7VxQXBom4" ], "script": "base64:AAIFAAAAAAAAAD4IAhIECgIBCBIDCgEIEhQKEggBAQgBAQEBAQEBARgEAQEEGBIFCgMBAQgSAwoBARIDCgEBEgQKAgEBEgASAAAAAEoAAAAACWtleUFjdGl2ZQIAAAAGYWN0aXZlAAAAAA9rZXlBZG1pblB1YktleTECAAAAC2FkbWluX3B1Yl8xAAAAAA9rZXlBZG1pblB1YktleTICAAAAC2FkbWluX3B1Yl8yAAAAAA9rZXlBZG1pblB1YktleTMCAAAAC2FkbWluX3B1Yl8zAAAAACFrZXlMYXVuY2hwYWREYXRhVHJhbnNhY3Rpb25TdGF0dXMCAAAAIWxhdW5jaHBhZF9kYXRhX3RyYW5zYWN0aW9uX3N0YXR1cwAAAAASa2V5TGF1bmNocGFkTmV4dElkAgAAABFsYXVuY2hwYWRfbmV4dF9pZAAAAAAUa2V5TGF1bmNocGFkQWN0aXZlSWQCAAAAE2xhdW5jaHBhZF9hY3RpdmVfaWQAAAAADWtleUluaXRDYWxsZXICAAAAC2luaXRfY2FsbGVyAAAAAAprZXlBZGRyZXNzAgAAAAhfYWRkcmVzcwAAAAANa2V5SW5pdEhlaWdodAIAAAAMX2luaXRfaGVpZ2h0AAAAAA5rZXlTdGFydEhlaWdodAIAAAANX3N0YXJ0X2hlaWdodAAAAAARa2V5RmluYWxpc2VIZWlnaHQCAAAAEF9maW5hbGlzZV9oZWlnaHQAAAAADGtleUNvbWlzc2lvbgIAAAAKX2NvbWlzc2lvbgAAAAAKa2V5QXNzZXRJZAIAAAAJX2Fzc2V0X2lkAAAAABNrZXlUb3RhbFRva2VuQW1vdW50AgAAABNfdG90YWxfdG9rZW5fYW1vdW50AAAAABprZXlUb3RhbEFtb3VudEJ1eUFzc2V0U29sZAIAAAAVX3RvdGFsX2J1eV9hc3NldF9zb2xkAAAAABJrZXlUb2tlbnNQZXJUaWNrZXQCAAAAEl90b2tlbnNfcGVyX3RpY2tldAAAAAAQa2V5UHJpY2VQZXJUb2tlbgIAAAAQX3ByaWNlX3Blcl90b2tlbgAAAAAQa2V5U3dvcFBlclRpY2tldAIAAAAQX3N3b3BfcGVyX3RpY2tldAAAAAAWa2V5U3dvcGZpVGlja2V0c0Ftb3VudAIAAAAXX3RpY2tldHNfc3dvcGZpX21lbWJlcnMAAAAAF2tleUNhbXBhaWduVG9rZW5zQW1vdW50AgAAABNfdG9rZW5zX2FjY2Vzc19saXN0AAAAABZrZXlUb2tlbnNQZXJBbGxvY2F0aW9uAgAAABZfdG9rZW5zX3Blcl9hbGxvY2F0aW9uAAAAABNrZXlUaWNrZXRMYXN0TnVtYmVyAgAAABNfdGlja2V0X2xhc3RfbnVtYmVyAAAAABNrZXlHb3Zlcm5hbmNlU3Rha2VkAgAAAAxfU1dPUF9hbW91bnQAAAAADGtleVVzZXJSZWZJZAIAAAAHX3JlZl9pZAAAAAANa2V5VmVyaWZ5SGFzaAIAAAAMX3ZlcmlmeV9oYXNoAAAAAAtrZXlEdXJhdGlvbgIAAAAJX2R1cmF0aW9uAAAAABxrZXlBbW91bnRCdXlBc3NldEluTWFya2V0aW5nAgAAACdfdG90YWxfcHVyY2hhc2VkX2J1eV9hc3NldF9pbl9tYXJrZXRpbmcAAAAAJWtleUFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmdGaW5hbGl6ZWQCAAAAMV90b3RhbF9wdXJjaGFzZWRfYnV5X2Fzc2V0X2luX21hcmtldGluZ19maW5hbGl6ZWQAAAAAE2tleVRyYW5zZmVyQnV5QXNzZXQCAAAAE190cmFuc2Zlcl9idXlfYXNzZXQAAAAAFGtleUZyZWV6U3dvcER1cmF0aW9uAgAAABVfZnJlZXplX3N3b3BfZHVyYXRpb24AAAAAGGtleUZyZWV6ZUFkZGl0aW9uYWxUb2tlbgIAAAAYX2ZyZWV6ZV9hZGRpdGlvbmFsX3Rva2VuAAAAABBrZXlGcmVlemVUb2tlbklkAgAAABBfZnJlZXplX3Rva2VuX2lkAAAAABZrZXlGcmVlemVUb2tlbkR1cmF0aW9uAgAAABZfZnJlZXplX3Rva2VuX2R1cmF0aW9uAAAAABdrZXlGcmVlemVUb2tlblBlclRpY2tldAIAAAAYX2ZyZWV6ZV90b2tlbl9wZXJfdGlja2V0AAAAAAtrZXlCdXlUb2tlbgIAAAAKX2J1eV90b2tlbgAAAAAOa2V5Q2xhaW1QYXJhbXMCAAAADV9jbGFpbV9wYXJhbXMAAAAAG2tleUhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbgIAAAAbX2hpZ2hfY29tcGV0aXRpb25fY29taXNzaW9uAAAAABZrZXlIaWdoQ29tcGV0aXRpb25TYWxlAgAAABZfaGlnaF9jb21wZXRpdGlvbl9zYWxlAAAAABVrZXlIQ1RpY2tldExhc3ROdW1iZXICAAAAJF9oaWdoX2NvbXBldGl0aW9uX3RpY2tldF9sYXN0X251bWJlcgAAAAAYa2V5SGlnaENvbXBldGl0aW9uQW1vdW50AgAAABlfdGlja2V0c19oaWdoX2NvbXBldGl0aW9uAAAAABxrZXlUb3RhbEFtb3VudEJ1eUFzc2V0U29sZEhDAgAAACZfdG90YWxfYnV5X2Fzc2V0X3NvbGRfaGlnaF9jb21wZXRpdGlvbgAAAAAUa2V5VXNlckNsYWltZWRUb2tlbnMCAAAAD19jbGFpbWVkX3Rva2VucwAAAAAXa2V5VXNlckNsYWltZWRCdXlUb2tlbnMCAAAAE19jbGFpbWVkX2J1eV90b2tlbnMAAAAAGmtleVVzZXJCb3VnaHRUaWNrZXRzQW1vdW50AgAAAA9fYm91Z2h0X3RpY2tldHMAAAAADmtleVVzZXJUaWNrZXRzAgAAAA9fdGlja2V0c19udW1iZXIAAAAAEGtleVVzZXJIQ1RpY2tldHMCAAAAIF90aWNrZXRzX251bWJlcl9oaWdoX2NvbXBldGl0aW9uAAAAABxrZXlVc2VySENCb3VnaHRUaWNrZXRzQW1vdW50AgAAACBfYm91Z2h0X3RpY2tldHNfaGlnaF9jb21wZXRpdGlvbgAAAAAba2V5VXNlckF2YWlsYWJsZUFsbG9jYXRpb25zAgAAAB1fYXZhaWxhYmxlX3B1cmNoYXNlX21hcmtldGluZwAAAAAga2V5VXNlckFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcCAAAAIV9wdXJjaGFzZWRfYnV5X2Fzc2V0X2luX21hcmtldGluZwAAAAAYa2V5VXNlckJvdWdodEFsbG9jYXRpb25zAgAAABNfYm91Z2h0X2FsbG9jYXRpb25zAAAAABJrZXlVc2VyQ2xhaW1TdGF0dXMCAAAADV9jbGFpbV9zdGF0dXMAAAAAGmtleVVzZXJXaW5uZWRUaWNrZXRzQW1vdW50AgAAAA9fdGlja2V0c19yZXN1bHQAAAAAKWtleVVzZXJXaW5uZWRIaWdoQ29tcGV0aXRp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ZQAAAAIJAQAAAAhpc0FjdGl2ZQAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAtpc0FkbWluQ2FsbAAAAAEFAAAAAWkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANa2V5SW5pdENhbGxlcgUAAAAHYWRkcmVzcwUAAAADbmlsAAAAAWkBAAAABGluaXQAAAASAAAADnByb2plY3RBZGRyZXNzAAAAC3N0YXJ0SGVpZ2h0AAAACGR1cmF0aW9uAAAACGJ1eVRva2VuAAAACmNvbW1pc3Npb24AAAAPdG9rZW5zUGVyVGlja2V0AAAADXByaWNlUGVyVG9rZW4AAAATc3dvcGZpVGlja2V0c0Ftb3VudAAAABRjYW1wYWlnblRva2Vuc0Ftb3VudAAAABN0b2tlbnNQZXJBbGxvY2F0aW9uAAAADXN3b3BQZXJUaWNrZXQAAAASc3dvcEZyZWV6ZUR1cmF0aW9uAAAAC2NsYWltUGFyYW1zAAAAE0hpZ2hDb21wZXRpdGlvblNhbGUAAAAYaGlnaENvbXBldGl0aW9uQ29taXNzaW9uAAAAHGhpZ2hDb21wZXRpdGlvblRpY2tldHNBbW91bnQAAAAVZnJlZXplQWRkaXRpb25hbFRva2VuAAAADGZyZWV6ZVBhcmFtcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAACGlzQWN0aXZlAAAAAAMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAADWtleUluaXRDYWxsZXICAAAAAAkAAAIAAAABAgAAAClPbmx5IHByb2plY3QgYWRtaW4gY2FuIGNhbGwgaW5pdCBmdW5jdGlvbgMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdT25lIGF0dGFjaGVkIHBheW1lbnQgZXhwZWN0ZWQDCQAAZgAAAAIFAAAABmhlaWdodAUAAAALc3RhcnRIZWlnaHQJAAACAAAAAQIAAAAzU3RhcnQgaGVpZ2h0IG11c3QgYmUgZ3JlYXRlciB0aGFuIGJsb2NrY2hhaW4gaGVpZ2h0AwMFAAAAFWZyZWV6ZUFkZGl0aW9uYWxUb2tlbgkBAAAAAiE9AAAAAgkAAZAAAAABBQAAAAxmcmVlemVQYXJhbXMAAAAAAAAAAAMHCQAAAgAAAAECAAAAJEZyZWV6ZSBwYXJhbXMgbGlzdCBtdXN0IGhhdmUgMyBpdGVtcwQAAAALbGF1bmNocGFkSWQJAQAAABJnZXRMYXVuY2hwYWROZXh0SWQAAAAABAAAAA5sYXVuY2hwYWRJZFN0cgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAQAAAALJHQwNjQwMjY0NzcJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAAskdDA2NDAyNjQ3NwAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAACyR0MDY0MDI2NDc3AAAAAl8yBAAAAAskdDA2NDg2NjU1OQkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAACnBtdEFzc2V0SWQEAAAADXBtdFN0ckFzc2V0SWQIBQAAAAskdDA2NDg2NjU1OQAAAAJfMQQAAAAMcG10QXNzZXROYW1lCAUAAAALJHQwNjQ4NjY1NTkAAAACXzIEAAAAC3BtdERlY2ltYWxzCAUAAAALJHQwNjQ4NjY1NTkAAAACXzMEAAAAFWZyZWV6ZUFkZGl0aW9uYWxFbnRyeQMFAAAAFWZyZWV6ZUFkZGl0aW9uYWxUb2tlbgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkAASwAAAACBQAAAA5sYXVuY2hwYWRJZFN0cgUAAAAYa2V5RnJlZXplQWRkaXRpb25hbFRva2VuBgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAABBrZXlGcmVlemVUb2tlbklkCQABkQAAAAIFAAAADGZyZWV6ZVBhcmFtcwAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAA5sYXVuY2hwYWRJZFN0cgUAAAAWa2V5RnJlZXplVG9rZW5EdXJhdGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADGZyZWV6ZVBhcmFtcwAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAA5sYXVuY2hwYWRJZFN0cgUAAAAXa2V5RnJlZXplVG9rZW5QZXJUaWNrZXQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAxmcmVlemVQYXJhbXMAAAAAAAAAAAIFAAAAA25pbAUAAAADbmlsCQAETgAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAANcG10U3RyQXNzZXRJZAIAAAAKX2xhdW5jaHBhZAUAAAALbGF1bmNocGFkSWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEmtleUxhdW5jaHBhZE5leHRJZAkAAGQAAAACBQAAAAtsYXVuY2hwYWRJZAAAAAAAAAAAAQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAAAprZXlBZGRyZXNzBQAAAA5wcm9qZWN0QWRkcmVzcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAA5sYXVuY2hwYWRJZFN0cgUAAAANa2V5SW5pdEhlaWdodAUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAAA5rZXlTdGFydEhlaWdodAUAAAALc3RhcnRIZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAC2tleUR1cmF0aW9uBQAAAAhkdXJhdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAAAtrZXlCdXlUb2tlbgUAAAAIYnV5VG9rZW4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAFGtleUZyZWV6U3dvcER1cmF0aW9uBQAAABJzd29wRnJlZXplRHVyYXRpb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAE2tleVRvdGFsVG9rZW5BbW91bnQFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAAAprZXlBc3NldElkBQAAAA1wbXRTdHJBc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAAAxrZXlDb21pc3Npb24FAAAACmNvbW1pc3Npb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAE2tleVRpY2tldExhc3ROdW1iZXIAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAFWtleUhDVGlja2V0TGFzdE51bWJlcgAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAA5sYXVuY2hwYWRJZFN0cgUAAAASa2V5VG9rZW5zUGVyVGlja2V0BQAAAA90b2tlbnNQZXJUaWNrZXQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAEGtleVByaWNlUGVyVG9rZW4FAAAADXByaWNlUGVyVG9rZW4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAEGtleVN3b3BQZXJUaWNrZXQFAAAADXN3b3BQZXJUaWNrZXQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAFmtleVN3b3BmaVRpY2tldHNBbW91bnQFAAAAE3N3b3BmaVRpY2tldHNBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAF2tleUNhbXBhaWduVG9rZW5zQW1vdW50BQAAABRjYW1wYWlnblRva2Vuc0Ftb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAA5sYXVuY2hwYWRJZFN0cgUAAAAWa2V5VG9rZW5zUGVyQWxsb2NhdGlvbgUAAAATdG9rZW5zUGVyQWxsb2NhdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAAA5rZXlDbGFpbVBhcmFtcwkABLkAAAACBQAAAAtjbGFpbVBhcmFtcwIAAAABLAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkAASwAAAACBQAAAA5sYXVuY2hwYWRJZFN0cgUAAAAWa2V5SGlnaENvbXBldGl0aW9uU2FsZQUAAAATSGlnaENvbXBldGl0aW9uU2FsZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAA5sYXVuY2hwYWRJZFN0cgUAAAAba2V5SGlnaENvbXBldGl0aW9uQ29taXNzaW9uBQAAABhoaWdoQ29tcGV0aXRpb25Db21pc3Npb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAGGtleUhpZ2hDb21wZXRpdGlvbkFtb3VudAUAAAAcaGlnaENvbXBldGl0aW9uVGlja2V0c0Ftb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAUa2V5TGF1bmNocGFkQWN0aXZlSWQFAAAAC2xhdW5jaHBhZElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADWtleUluaXRDYWxsZXICAAAAAAUAAAADbmlsBQAAABVmcmVlemVBZGRpdGlvbmFsRW50cnkAAAABaQEAAAAIZmluYWxpc2UAAAADAAAAC2xhdW5jaHBhZElkAAAACXZyZkhlaWdodAAAAApzZWNyZXRXb3JkCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAIaXNBY3RpdmUAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAALaXNBZG1pbkNhbGwAAAABBQAAAAFpBAAAAAlzYXZlZEhhc2gJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAANa2V5VmVyaWZ5SGFzaAQAAAAIY2FsY0hhc2gJAAJYAAAAAQkAAfcAAAABCQAAywAAAAIJAAGaAAAAAQUAAAAJdnJmSGVpZ2h0CQABmwAAAAEFAAAACnNlY3JldFdvcmQDCQEAAAACIT0AAAACBQAAAAhjYWxjSGFzaAUAAAAJc2F2ZWRIYXNoCQAAAgAAAAECAAAAHHZyZiBIZWlnaHQgaGFzaCBub3QgbWF0Y2hpbmcEAAAACyR0MDk0NjU5NjE1CQEAAAAWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZwAAAAEJAQAAAAV2YWx1ZQAAAAEJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAC2xhdW5jaHBhZElkBQAAAAtrZXlCdXlUb2tlbgQAAAAKYnV5QXNzZXRJZAgFAAAACyR0MDk0NjU5NjE1AAAAAl8xBAAAAA1idXlBc3NldFN0cklkCAUAAAALJHQwOTQ2NTk2MTUAAAACXzIEAAAADGJ1eUFzc2V0TmFtZQgFAAAACyR0MDk0NjU5NjE1AAAAAl8zBAAAABBidXlBc3NldERlY2ltYWxzCAUAAAALJHQwOTQ2NTk2MTUAAAACXzQEAAAADnByb2plY3RBZGRyZXNzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAACmtleUFkZHJlc3MEAAAACmNvbW1pc3Npb24JAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAAMa2V5Q29taXNzaW9uBAAAAAxjb21taXNzaW9uSEMJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAAba2V5SGlnaENvbXBldGl0aW9uQ29taXNzaW9uBAAAABJ0cmFuc2ZlcmVkQnV5QXNzZXQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAC2xhdW5jaHBhZElkBQAAABNrZXlUcmFuc2ZlckJ1eUFzc2V0AAAAAAAAAAAABAAAABtzd29wZmlNZW1iZXJzQnV5QXNzZXRBbW91bnQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAAaa2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGQEAAAAFnN3b3BmaUhDQnV5QXNzZXRBbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAAca2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGRIQwAAAAAAAAAAAAQAAAAWc3dvcGZpTWVtYmVyc0NvbWlzc2lvbgkAAGsAAAADBQAAABtzd29wZmlNZW1iZXJzQnV5QXNzZXRBbW91bnQFAAAACmNvbW1pc3Npb24AAAAAAAAAAGQEAAAAEXN3b3BmaUhDQ29taXNzaW9uCQAAawAAAAMFAAAAFnN3b3BmaUhDQnV5QXNzZXRBbW91bnQFAAAADGNvbW1pc3Npb25IQwAAAAAAAAAAZAQAAAAedG90YWxBbW91bnRCdXlBc3NldEluTWFya2V0aW5nCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAAJWtleUFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmdGaW5hbGl6ZWQEAAAAEm1hcmtldGluZ0NvbWlzc2lvbgkAAGsAAAADBQAAAB50b3RhbEFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcFAAAACmNvbW1pc3Npb24AAAAAAAAAAGQEAAAADXVuc3Rha2VBbW91bnQJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACBQAAABtzd29wZmlNZW1iZXJzQnV5QXNzZXRBbW91bnQFAAAAHnRvdGFsQW1vdW50QnV5QXNzZXRJbk1hcmtldGluZwUAAAAWc3dvcGZpTWVtYmVyc0NvbWlzc2lvbgUAAAASbWFya2V0aW5nQ29taXNzaW9uBQAAABZzd29wZmlIQ0J1eUFzc2V0QW1vdW50BQAAABFzd29wZmlIQ0NvbWlzc2lvbgMJAABmAAAAAgUAAAASdHJhbnNmZXJlZEJ1eUFzc2V0CQAAZAAAAAIFAAAAG3N3b3BmaU1lbWJlcnNCdXlBc3NldEFtb3VudAUAAAAedG90YWxBbW91bnRCdXlBc3NldEluTWFya2V0aW5nCQAAAgAAAAECAAAAKENhbid0IHRyYW5zZmVyIG5lZ2F0aXZlIHZhbHVlIHRvIHByb2plY3QEAAAAA2ludgMJAAAAAAAAAgUAAAAKYnV5QXNzZXRJZAUAAAAEVVNETgkAA/wAAAAEBQAAABJzdGFraW5nVVNETkFkZHJlc3MCAAAADnVubG9ja05ldXRyaW5vCQAETAAAAAIFAAAADXVuc3Rha2VBbW91bnQJAARMAAAAAgkAAlgAAAABBQAAAARVU0ROBQAAAANuaWwFAAAAA25pbAAAAAAAAAAAAAMJAAAAAAAAAgUAAAADaW52BQAAAANpbnYJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAARa2V5RmluYWxpc2VIZWlnaHQFAAAABmhlaWdodAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA5wcm9qZWN0QWRkcmVzcwkAAGUAAAACCQAAZAAAAAIJAABkAAAAAgUAAAAbc3dvcGZpTWVtYmVyc0J1eUFzc2V0QW1vdW50BQAAABZzd29wZmlIQ0J1eUFzc2V0QW1vdW50BQAAAB50b3RhbEFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcFAAAAEnRyYW5zZmVyZWRCdXlBc3NldAUAAAAKYnV5QXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0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a2V0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAAEmtleVRva2Vuc1BlclRpY2tldAQAAAANJHQwMTM3MTYxMzg2MAkBAAAAFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAACmtleUFzc2V0SWQEAAAAB3Rva2VuSWQIBQAAAA0kdDAxMzcxNjEzODYwAAAAAl8xBAAAAA90b2tlblN0ckFzc2V0SWQIBQAAAA0kdDAxMzcxNjEzODYwAAAAAl8yBAAAAA50b2tlbkFzc2V0TmFtZQgFAAAADSR0MDEzNzE2MTM4NjAAAAACXzMEAAAADXRva2VuRGVjaW1hbHMIBQAAAA0kdDAxMzcxNjEzODYwAAAAAl80BAAAAAt0aWNrZXRQcmljZQkAAGsAAAADBQAAAA90b2tlbnNQZXJUaWNrZXQFAAAACnRva2VuUHJpY2UJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAUAAAANdG9rZW5EZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAATdG9rZW5zUGVyQWxsb2NhdGlvbgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAC2xhdW5jaHBhZElkBQAAABZrZXlUb2tlbnNQZXJBbGxvY2F0aW9uBAAAABR0cmFuc2ZlclRva2Vuc0Ftb3VudAkAAGQAAAACCQAAZAAAAAIJAABoAAAAAgUAAAANd29ubmVkVGlja2V0cwUAAAAPdG9rZW5zUGVyVGlja2V0CQAAaAAAAAIFAAAAEmFsbG93ZWRBbGxvY2F0aW9ucwUAAAATdG9rZW5zUGVyQWxsb2NhdGlvbgkAAGgAAAACBQAAAA93b25uZWRIQ1RpY2tldHMFAAAAD3Rva2Vuc1BlclRpY2tldAQAAAAbbm90QWxsb3dlZEFsbG9jYXRpb25zVG9rZW5zCQAAaAAAAAIJAABlAAAAAgUAAAARYm91Z2h0QWxsb2NhdGlvbnMFAAAAEmFsbG93ZWRBbGxvY2F0aW9ucwUAAAATdG9rZW5zUGVyQWxsb2NhdGlvbgQAAAAWYnV5QXNzZXRGb3JBbGxvY2F0aW9ucwkAAGsAAAADCQAAawAAAAMFAAAAG25vdEFsbG93ZWRBbGxvY2F0aW9uc1Rva2VucwUAAAAKdG9rZW5QcmljZQkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAABQAAAA10b2tlbkRlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAARET1dOCQAAZAAAAAIAAAAAAAAAAGQFAAAACmNvbW1pc3Npb24AAAAAAAAAAGQEAAAAGmJ1eUFzc2V0Rm9yVW53b25uZWRUaWNrZXRzCQAAawAAAAMJAABoAAAAAgkAAGUAAAACBQAAAA1ib3VnaHRUaWNrZXRzBQAAAA13b25uZWRUaWNrZXRzBQAAAAt0aWNrZXRQcmljZQkAAGQAAAACAAAAAAAAAABkBQAAAApjb21taXNzaW9uAAAAAAAAAABkBAAAABxidXlBc3NldEZvckhDVW53b25uZWRUaWNrZXRzCQAAawAAAAMJAABoAAAAAgkAAGUAAAACBQAAAA9ib3VnaHRIQ1RpY2tldHMFAAAAD3dvbm5lZEhDVGlja2V0cwUAAAALdGlja2V0UHJpY2UJAABkAAAAAgAAAAAAAAAAZAUAAAAMY29tbWlzc2lvbkhDAAAAAAAAAABkBAAAAA9jbGFpbWVkQnV5VG9rZW4JAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAAF2tleVVzZXJDbGFpbWVkQnV5VG9rZW5zAAAAAAAAAAAAAwMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAFmJ1eUFzc2V0Rm9yQWxsb2NhdGlvbnMGCQAAZgAAAAIAAAAAAAAAAAAFAAAAGmJ1eUFzc2V0Rm9yVW53b25uZWRUaWNrZXRzBgkAAGYAAAACAAAAAAAAAAAABQAAABxidXlBc3NldEZvckhDVW53b25uZWRUaWNrZXRzCQAAAgAAAAECAAAAUkVycm9yIHdpdGggYWxsb3dlZCBhbGxvY2F0aW9uIHBhcmFtIG9yIHdvbm5lZCB0aWNrZXRzIHBhcmFtIHBsZWFzZSBjb250YWN0IHN1cHBvcnQEAAAAFnJldHVybmVkQnV5QXNzZXRBbW91bnQJAABlAAAAAgkAAGQAAAACCQAAZAAAAAIFAAAAGmJ1eUFzc2V0Rm9yVW53b25uZWRUaWNrZXRzBQAAABxidXlBc3NldEZvckhDVW53b25uZWRUaWNrZXRzBQAAABZidXlBc3NldEZvckFsbG9jYXRpb25zBQAAAA9jbGFpbWVkQnV5VG9rZW4EAAAAEHRyYW5zZmVyQnV5QXNzZXQDCQAAZgAAAAIFAAAAFnJldHVybmVkQnV5QXNzZXRBbW91bnQAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABZyZXR1cm5lZEJ1eUFzc2V0QW1vdW50BQAAAApidXlBc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAAXa2V5VXNlckNsYWltZWRCdXlUb2tlbnMFAAAAFnJldHVybmVkQnV5QXNzZXRBbW91bnQFAAAAA25pbAUAAAADbmlsBAAAAANpbnYDAwkAAGYAAAACBQAAABZyZXR1cm5lZEJ1eUFzc2V0QW1vdW50AAAAAAAAAAAACQAAAAAAAAIFAAAACmJ1eUFzc2V0SWQFAAAABFVTRE4HCQAD/AAAAAQFAAAAEnN0YWtpbmdVU0ROQWRkcmVzcwIAAAAOdW5sb2NrTmV1dHJpbm8JAARMAAAAAgUAAAAWcmV0dXJuZWRCdXlBc3NldEFtb3VudAkABEwAAAACCQACWAAAAAEFAAAABFVTRE4FAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAANpbnYFAAAAA2ludgQAAAANY2xhaW1lZFBhcmFtcwkABLUAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAAB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", "height": 1903585, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9mHKMvrGPfnbPCYKVdf2n5RZQ36bMNzkUgqCkQsP81Tw Next: 5jnbopMRBeStmokxm3wZG2heTMxnh4GnESMLSNKAkVXn Diff:
OldNewDifferences
3131
3232 let o = "_total_token_amount"
3333
34-let p = "_total_usdn_sold"
34+let p = "_total_buy_asset_sold"
3535
3636 let q = "_tokens_per_ticket"
3737
5555
5656 let A = "_duration"
5757
58-let B = "_total_purchased_usdn_in_marketing"
58+let B = "_total_purchased_buy_asset_in_marketing"
5959
60-let C = "_total_purchased_usdn_in_marketing_finalized"
60+let C = "_total_purchased_buy_asset_in_marketing_finalized"
6161
62-let D = "_transfer_usd"
62+let D = "_transfer_buy_asset"
6363
6464 let E = "_freeze_swop_duration"
6565
7171
7272 let I = "_freeze_token_per_ticket"
7373
74-let J = "_bought_tickets"
74+let J = "_buy_token"
7575
76-let K = "_tickets_number"
76+let K = "_claim_params"
7777
78-let L = "_available_purchase_marketing"
78+let L = "_high_competition_comission"
7979
80-let M = "_purchased_usdn_in_marketing"
80+let M = "_high_competition_sale"
8181
82-let N = "_bought_allocations"
82+let N = "_high_competition_ticket_last_number"
8383
84-let O = "_claim_status"
84+let O = "_tickets_high_competition"
8585
86-let P = "_tickets_result"
86+let P = "_total_buy_asset_sold_high_competition"
8787
88-let Q = "_freeze_token_amount"
88+let Q = "_claimed_tokens"
8989
90-let R = 10000
90+let R = "_claimed_buy_tokens"
9191
92-let S = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
92+let S = "_bought_tickets"
9393
94-let T = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
94+let T = "_tickets_number"
9595
96-let U = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
96+let U = "_tickets_number_high_competition"
9797
98-let V = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
98+let V = "_bought_tickets_high_competition"
9999
100-let W = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
100+let W = "_available_purchase_marketing"
101101
102-let X = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
102+let X = "_purchased_buy_asset_in_marketing"
103103
104-let Y = 2
104+let Y = "_bought_allocations"
105105
106-let Z = valueOrElse(getBoolean(this, a), true)
106+let Z = "_claim_status"
107107
108-let aa = valueOrElse(getIntegerValue(this, g), -1)
108+let aa = "_tickets_result"
109109
110-func ab (ac) = {
111- let ad = getString(S, ac)
112- if ($isInstanceOf(ad, "String"))
110+let ab = "_tickets_result_high_competition"
111+
112+let ac = "_freeze_token_amount"
113+
114+let ad = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
115+
116+let ae = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
117+
118+let af = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
119+
120+let ag = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
121+
122+let ah = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
123+
124+let ai = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
125+
126+let aj = 2
127+
128+let ak = valueOrElse(getIntegerValue(this, g), -1)
129+
130+func al (am) = {
131+ let an = getString(ad, am)
132+ if ($isInstanceOf(an, "String"))
113133 then {
114- let ae = ad
115- fromBase58String(ae)
134+ let ao = an
135+ fromBase58String(ao)
116136 }
117137 else {
118- let af = ad
138+ let ap = an
119139 throw("Admin public key is empty")
120140 }
121141 }
122142
123143
124-let ag = ab(b)
144+let aq = al(b)
125145
126-let ah = ab(c)
146+let ar = al(c)
127147
128-let ai = ab(d)
148+let as = al(d)
129149
130-func aj (ak) = {
131- let ad = ak
132- if ($isInstanceOf(ad, "ByteVector"))
150+func at (au) = {
151+ let an = au
152+ if ($isInstanceOf(an, "ByteVector"))
133153 then {
134- let al = ad
135- let am = toBase58String(al)
136- let an = valueOrErrorMessage(assetInfo(al), (("Asset " + am) + " doesn't exist"))
137- $Tuple3(am, an.name, an.decimals)
154+ let av = an
155+ let aw = toBase58String(av)
156+ let ax = valueOrErrorMessage(assetInfo(av), (("Asset " + aw) + " doesn't exist"))
157+ $Tuple3(aw, ax.name, ax.decimals)
138158 }
139- else if ($isInstanceOf(ad, "Unit"))
159+ else if ($isInstanceOf(an, "Unit"))
140160 then {
141- let ao = ad
161+ let ay = an
142162 $Tuple3("WAVES", "WAVES", 8)
143163 }
144164 else throw("Match error")
145165 }
146166
147167
148-func ap () = valueOrElse(getInteger(this, f), 1)
168+func az () = valueOrElse(getInteger(this, f), 1)
149169
150170
151-func aq () = valueOrElse(getInteger(V, ((("rpd_balance_" + toBase58String(W)) + "_") + toString(this))), 0)
171+func aA () = valueOrElse(getInteger(ag, ((("rpd_balance_" + toBase58String(ah)) + "_") + toString(this))), 0)
152172
153173
154-@Callable(ar)
155-func hashingRandom (as,at) = if (!(Z))
156- then throw("DApp is inactive at this moment")
157- else if (!(containsElement([ag, ah, ai], ar.callerPublicKey)))
158- then throw("Only admin can call this function")
159- else [StringEntry((toString(as) + z), at)]
174+let aB = valueOrElse(getBoolean(this, a), true)
175+
176+func aC () = if (aB)
177+ then unit
178+ else throw("DApp is inactive at this moment")
179+
180+
181+func aD (aE) = if (containsElement([aq, ar, as], aE.callerPublicKey))
182+ then unit
183+ else throw("Only admin can call this function")
184+
185+
186+func aF (aG) = if ((aG == "WAVES"))
187+ then $Tuple4(unit, "WAVES", "WAVES", 8)
188+ else {
189+ let aw = aG
190+ let av = fromBase58String(aG)
191+ let ax = valueOrErrorMessage(assetInfo(av), (("Asset " + aw) + " doesn't exist"))
192+ $Tuple4(av, aw, ax.name, ax.decimals)
193+ }
194+
195+
196+@Callable(aE)
197+func hashingRandom (aH,aI) = valueOrElse(aC(), valueOrElse(aD(aE), [StringEntry((toString(aH) + z), aI)]))
160198
161199
162200
163-@Callable(ar)
164-func initCaller (au) = if (!(Z))
165- then throw("DApp is inactive at this moment")
166- else if (!(containsElement([ag, ah, ai], ar.callerPublicKey)))
167- then throw("Only admin can call this function")
168- else [StringEntry(h, au)]
201+@Callable(aE)
202+func initCaller (aJ) = valueOrElse(aC(), valueOrElse(aD(aE), [StringEntry(h, aJ)]))
169203
170204
171205
172-@Callable(ar)
173-func init (av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG) = if (!(Z))
174- then throw("DApp is inactive at this moment")
175- else if ((toString(ar.caller) != valueOrElse(getString(this, h), "")))
176- then throw("Only project admin can call init function")
177- else if ((size(ar.payments) != 1))
178- then throw("One attached payment expected")
179- else if ((height > aw))
180- then throw("Start height must be greater than blockchain height")
181- else if (if (aF)
182- then (size(aG) != 3)
183- else false)
184- then throw("Freeze params list must have 3 items")
185- else {
186- let as = ap()
187- let aH = toString(as)
188- let aI = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
189- let aJ = aI._1
190- let aK = aI._2
191- let aL = aj(aK)
192- let aM = aL._1
193- let aN = aL._2
194- let aO = aL._3
195- let aP = if (aF)
196- then [BooleanEntry((aH + F), true), StringEntry((aH + G), aG[0]), IntegerEntry((aH + H), parseIntValue(aG[1])), IntegerEntry((aH + I), parseIntValue(aG[2]))]
197- else nil
198- ([IntegerEntry((aM + "_launchpad"), as), IntegerEntry(f, (as + 1)), StringEntry((aH + i), av), IntegerEntry((aH + j), height), IntegerEntry((aH + k), aw), IntegerEntry((aH + A), R), IntegerEntry((aH + E), aE), IntegerEntry((aH + o), aJ), StringEntry((aH + n), aM), IntegerEntry((aH + m), ax), IntegerEntry((aH + w), 0), IntegerEntry((aH + q), ay), IntegerEntry((aH + r), az), IntegerEntry((aH + s), aD), IntegerEntry((aH + t), aA), IntegerEntry((aH + u), aB), IntegerEntry((aH + v), aC), IntegerEntry(g, as), StringEntry(h, "")] ++ aP)
199- }
206+@Callable(aE)
207+func init (aK,aL,aM,aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW,aX,aY,aZ,ba,bb) = valueOrElse(aC(), if ((toString(aE.caller) != valueOrElse(getString(this, h), "")))
208+ then throw("Only project admin can call init function")
209+ else if ((size(aE.payments) != 1))
210+ then throw("One attached payment expected")
211+ else if ((height > aL))
212+ then throw("Start height must be greater than blockchain height")
213+ else if (if (ba)
214+ then (size(bb) != 3)
215+ else false)
216+ then throw("Freeze params list must have 3 items")
217+ else {
218+ let aH = az()
219+ let bc = toString(aH)
220+ let bd = $Tuple2(aE.payments[0].amount, aE.payments[0].assetId)
221+ let be = bd._1
222+ let bf = bd._2
223+ let bg = at(bf)
224+ let bh = bg._1
225+ let bi = bg._2
226+ let bj = bg._3
227+ let bk = if (ba)
228+ then [BooleanEntry((bc + F), true), StringEntry((bc + G), bb[0]), IntegerEntry((bc + H), parseIntValue(bb[1])), IntegerEntry((bc + I), parseIntValue(bb[2]))]
229+ else nil
230+ ([IntegerEntry((bh + "_launchpad"), aH), IntegerEntry(f, (aH + 1)), StringEntry((bc + i), aK), IntegerEntry((bc + j), height), IntegerEntry((bc + k), aL), IntegerEntry((bc + A), aM), StringEntry((bc + J), aN), IntegerEntry((bc + E), aV), IntegerEntry((bc + o), be), StringEntry((bc + n), bh), IntegerEntry((bc + m), aO), IntegerEntry((bc + w), 0), IntegerEntry((bc + N), 0), IntegerEntry((bc + q), aP), IntegerEntry((bc + r), aQ), IntegerEntry((bc + s), aU), IntegerEntry((bc + t), aR), IntegerEntry((bc + u), aS), IntegerEntry((bc + v), aT), StringEntry((bc + K), makeString(aW, ",")), BooleanEntry((bc + M), aX), IntegerEntry((bc + L), aY), IntegerEntry((bc + O), aZ), IntegerEntry(g, aH), StringEntry(h, "")] ++ bk)
231+ })
200232
201233
202234
203-@Callable(ar)
204-func commitSwopfiSale (as,aQ) = {
205- let aR = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
206- let aJ = aR._1
207- let aK = aR._2
208- let aS = valueOrElse(getInteger(T, (toString(ar.caller) + x)), 0)
209- let aT = (aS / getIntegerValue(this, (toString(as) + s)))
210- let aU = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + J)), 0)
211- let aV = (aT - aU)
212- let aw = value(getInteger(this, (toString(as) + k)))
213- let aW = value(getInteger(this, (toString(as) + A)))
214- let aF = valueOrElse(getBoolean(this, (toString(as) + F)), false)
215- if (!(Z))
216- then throw("DApp is inactive at this moment")
217- else if ((aa != as))
218- then throw("There is no active launchpad or this launchpad is ended")
219- else if ((aw > height))
220- then throw("Launchpad sale not started yet")
221- else if ((height > (aw + aW)))
222- then throw("Launchpad sale ended")
223- else if (if (!(aF))
224- then if ((size(ar.payments) != 1))
225- then true
226- else (aK != W)
227- else false)
228- then throw("One attached payment in USDN expected")
229- else if (if (aF)
230- then if ((size(ar.payments) != 2))
231- then true
232- else (aK != W)
233- else false)
234- then {
235- let aX = getStringValue(this, (toString(as) + G))
236- throw(("Two attached payments expected: First in USDN, second in " + aX))
237- }
238- else if (if ((0 >= aT))
239- then true
240- else (0 >= aV))
241- then throw("Not enought SWOP in staking to buy tickets")
242- else {
243- let aY = getIntegerValue(this, (toString(as) + r))
244- let ay = getIntegerValue(this, (toString(as) + q))
245- let aZ = fromBase58String(getStringValue(this, (toString(as) + n)))
246- let ba = aj(aZ)
247- let bb = ba._1
248- let bc = ba._2
249- let bd = ba._3
250- let be = fraction(ay, aY, pow(10, 0, bd, 0, 0, DOWN))
251- let bf = fraction(be, getIntegerValue(this, (toString(as) + m)), 100)
252- let bg = (aJ / (be + bf))
253- let bh = min([bg, aV])
254- let bi = (bh * (be + bf))
255- let bj = (aJ - bi)
256- if ((bg == 0))
257- then throw("Not enought USDN to buy tickets")
258- else if ((bj != 0))
259- then throw((((("Wrong payment. To buy " + toString(bh)) + "tickets you need to pay ") + toString(bi)) + "USDN"))
260- else {
261- let aP = if (aF)
262- then {
263- let aX = getStringValue(this, (toString(as) + G))
264- let bk = getIntegerValue(this, (toString(as) + I))
265- let bl = $Tuple2(ar.payments[1].amount, ar.payments[1].assetId)
266- let bm = bl._1
267- let bn = bl._2
268- let bo = aj(aK)
269- let bp = bo._1
270- let bq = bo._2
271- let br = bo._3
272- let bs = (bk * bg)
273- if (if ((bp != aX))
274- then true
275- else (bs != bm))
276- then throw((((("You need to add " + toString(bs)) + " ") + bq) + " as a second payment"))
277- else [IntegerEntry((((toString(ar.caller) + "_") + toString(as)) + Q), bm)]
278- }
279- else nil
280- let bt = valueOrElse(getString(this, (((toString(ar.caller) + "_") + toString(as)) + K)), "")
281- let bu = getIntegerValue(this, (toString(as) + w))
282- let bv = ((toString((bu + 1)) + "-") + toString((bu + bh)))
283- let bw = (bt + (if ((bt != ""))
284- then ("," + bv)
285- else ("" + bv)))
286- let bx = invoke(V, "lockNeutrino", nil, [AttachedPayment(aK, aJ)])
287- if ((bx == bx))
288- then {
289- let by = ([IntegerEntry((((toString(ar.caller) + "_") + toString(as)) + J), (aU + bh)), IntegerEntry((toString(as) + w), (bu + bh)), StringEntry((((toString(ar.caller) + "_") + toString(as)) + K), bw)] ++ aP)
290- if (!(isDefined(getString(this, (((toString(ar.caller) + "_") + toString(as)) + y)))))
291- then (by ++ [StringEntry((((toString(ar.caller) + "_") + toString(as)) + y), aQ)])
292- else by
293- }
294- else throw("Strict value is not equal to itself.")
295- }
296- }
297- }
235+@Callable(aE)
236+func finalise (aH,bl,bm) = valueOrElse(aC(), valueOrElse(aD(aE), {
237+ let bn = getStringValue(this, (toString(aH) + z))
238+ let bo = toBase58String(sha256((toBytes(bl) + toBytes(bm))))
239+ if ((bo != bn))
240+ then throw("vrf Height hash not matching")
241+ else {
242+ let bp = aF(value(getString(this, (toString(aH) + J))))
243+ let bq = bp._1
244+ let br = bp._2
245+ let bs = bp._3
246+ let bt = bp._4
247+ let aK = addressFromStringValue(getStringValue(this, (toString(aH) + i)))
248+ let aO = getIntegerValue(this, (toString(aH) + m))
249+ let bu = getIntegerValue(this, (toString(aH) + L))
250+ let bv = valueOrElse(getInteger(this, (toString(aH) + D)), 0)
251+ let bw = getIntegerValue(this, (toString(aH) + p))
252+ let bx = valueOrElse(getIntegerValue(this, (toString(aH) + P)), 0)
253+ let by = fraction(bw, aO, 100)
254+ let bz = fraction(bx, bu, 100)
255+ let bA = getIntegerValue(this, (toString(aH) + C))
256+ let bB = fraction(bA, aO, 100)
257+ let bC = (((((bw + bA) + by) + bB) + bx) + bz)
258+ if ((bv > (bw + bA)))
259+ then throw("Can't transfer negative value to project")
260+ else {
261+ let bD = if ((bq == ah))
262+ then invoke(ag, "unlockNeutrino", [bC, toBase58String(ah)], nil)
263+ else 0
264+ if ((bD == bD))
265+ then [IntegerEntry((toString(aH) + l), height), ScriptTransfer(aK, (((bw + bx) + bA) - bv), bq), ScriptTransfer(af, ((by + bB) + bz), bq)]
266+ else throw("Strict value is not equal to itself.")
267+ }
268+ }
269+ }))
298270
299271
300272
301-@Callable(ar)
302-func commitAccessListSale (as,aQ) = {
303- let bz = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
304- let aJ = bz._1
305- let aK = bz._2
306- let bA = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + M)), 0)
307- let bB = valueOrElse(getInteger(this, (toString(as) + B)), 0)
308- let bC = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + N)), 0)
309- let ax = getIntegerValue(this, (toString(as) + m))
310- let aY = getIntegerValue(this, (toString(as) + r))
311- let aC = getIntegerValue(this, (toString(as) + v))
312- let aZ = fromBase58String(getStringValue(this, (toString(as) + n)))
313- let bD = aj(aZ)
314- let bb = bD._1
315- let bc = bD._2
316- let bd = bD._3
317- let bE = fraction(fraction(aY, aC, pow(10, 0, bd, 0, 0, DOWN)), (100 + ax), 100)
318- let aw = value(getInteger(this, (toString(as) + k)))
319- let aW = value(getInteger(this, (toString(as) + A)))
320- if (!(Z))
321- then throw("DApp is inactive at this moment")
322- else if ((aa != as))
323- then throw("There is no active launchpad or this launchpad is ended")
324- else if ((aw > height))
325- then throw("Launchpad sale not started yet")
326- else if ((height > (aw + aW)))
327- then throw("Launchpad sale ended")
328- else if (if ((size(ar.payments) != 1))
273+@Callable(aE)
274+func claim (aH) = valueOrElse(aC(), {
275+ let bE = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + S)), 0)
276+ let bF = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + V)), 0)
277+ let bG = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + Y)), 0)
278+ let bH = valueOrElse(getBoolean(this, (((toString(aE.caller) + "_") + toString(aH)) + Z)), false)
279+ let bI = valueOrElse(getInteger(this, (toString(aH) + l)), 0)
280+ if ((bI == 0))
281+ then throw("You can't claim because results are not finalized")
282+ else if (bH)
283+ then throw("You are already claimed")
284+ else if (if (if ((bE == 0))
285+ then (bG == 0)
286+ else false)
287+ then (bF == 0)
288+ else false)
289+ then throw("You can't claim because you don't buy anything")
290+ else {
291+ let bJ = aF(value(getString(this, (toString(aH) + J))))
292+ let bq = bJ._1
293+ let br = bJ._2
294+ let bs = bJ._3
295+ let bt = bJ._4
296+ let bK = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + aa)), 0)
297+ let bL = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + ab)), 0)
298+ let bM = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + W)), 0)
299+ let aO = getIntegerValue(this, (toString(aH) + m))
300+ let bu = getIntegerValue(this, (toString(aH) + L))
301+ let bN = min([bG, bM])
302+ let bO = getIntegerValue(this, (toString(aH) + r))
303+ let aP = getIntegerValue(this, (toString(aH) + q))
304+ let bP = aF(getStringValue(this, (toString(aH) + n)))
305+ let bQ = bP._1
306+ let bR = bP._2
307+ let bS = bP._3
308+ let bT = bP._4
309+ let bU = fraction(aP, bO, pow(10, 0, bT, 0, 0, DOWN))
310+ let aT = getIntegerValue(this, (toString(aH) + v))
311+ let bV = (((bK * aP) + (bN * aT)) + (bL * aP))
312+ let bW = ((bG - bN) * aT)
313+ let bX = fraction(fraction(bW, bO, pow(10, 0, bT, 0, 0, DOWN)), (100 + aO), 100)
314+ let bY = fraction(((bE - bK) * bU), (100 + aO), 100)
315+ let bZ = fraction(((bF - bL) * bU), (100 + bu), 100)
316+ let ca = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + R)), 0)
317+ if (if (if ((0 > bX))
329318 then true
330- else (aK != W))
331- then throw("One attached payment in USDN expected")
332- else if ((bC >= Y))
333- then throw((("You can buy only " + toString(Y)) + "allocations"))
334- else if (if ((bE != aJ))
335- then ((bE * 2) != aJ)
319+ else (0 > bY))
320+ then true
321+ else (0 > bZ))
322+ then throw("Error with allowed allocation param or wonned tickets param please contact support")
323+ else {
324+ let cb = (((bY + bZ) + bX) - ca)
325+ let cc = if ((cb > 0))
326+ then [ScriptTransfer(aE.caller, cb, bq), IntegerEntry((((toString(aE.caller) + "_") + toString(aH)) + R), cb)]
327+ else nil
328+ let bD = if (if ((cb > 0))
329+ then (bq == ah)
336330 else false)
337- then throw((("Wrong payment. You can buy 1 or 2 allocations for " + toString(bE)) + " USDN per allocation"))
338- else {
339- let bF = (aJ / bE)
340- let bx = invoke(V, "lockNeutrino", nil, [AttachedPayment(aK, aJ)])
341- if ((bx == bx))
331+ then invoke(ag, "unlockNeutrino", [cb, toBase58String(ah)], nil)
332+ else 0
333+ if ((bD == bD))
334+ then {
335+ let cd = split(valueOrElse(getString(this, (toString(aH) + K)), ""), ",")
336+ if (if ((size(cd) == 0))
337+ then true
338+ else (cd[0] == "claimAll"))
342339 then {
343- let by = [IntegerEntry((((toString(ar.caller) + "_") + toString(as)) + N), (bC + bF)), IntegerEntry((((toString(ar.caller) + "_") + toString(as)) + M), (bA + aJ)), IntegerEntry((toString(as) + B), (bB + aJ))]
344- if (!(isDefined(getString(this, (((toString(ar.caller) + "_") + toString(as)) + y)))))
345- then (by ++ [StringEntry((((toString(ar.caller) + "_") + toString(as)) + y), aQ)])
346- else by
340+ let ce = if ((bV > 0))
341+ then [ScriptTransfer(aE.caller, bV, bQ)]
342+ else nil
343+ (([BooleanEntry((((toString(aE.caller) + "_") + toString(aH)) + Z), true), IntegerEntry((((toString(aE.caller) + "_") + toString(aH)) + Q), bV)] ++ ce) ++ cc)
347344 }
348- else throw("Strict value is not equal to itself.")
345+ else if ((cd[0] == "claimPeriod"))
346+ then {
347+ let cf = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + Q)), 0)
348+ let cg = value(parseInt(cd[2]))
349+ let ch = (value(parseInt(cd[3])) + bI)
350+ let ci = (cg + ch)
351+ let cj = fraction(bV, value(parseInt(cd[1])), 100)
352+ let ck = (cj + (if ((height > ch))
353+ then (fraction((bV - cj), (min([height, ci]) - ch), cg) - cf)
354+ else (0 - cf)))
355+ let cl = if ((bV >= (cf + ck)))
356+ then [BooleanEntry((((toString(aE.caller) + "_") + toString(aH)) + Z), true)]
357+ else nil
358+ if (if ((ck > 0))
359+ then true
360+ else (cb > 0))
361+ then {
362+ let ce = if ((ck > 0))
363+ then [IntegerEntry((((toString(aE.caller) + "_") + toString(aH)) + Q), (cf + ck)), ScriptTransfer(aE.caller, ck, bQ)]
364+ else nil
365+ (cc ++ ce)
366+ }
367+ else throw("Nothing to claim")
368+ }
369+ else throw("Unknown claim function")
349370 }
350- }
371+ else throw("Strict value is not equal to itself.")
372+ }
373+ }
374+ })
351375
352376
353377
354-@Callable(ar)
355-func finalise (as,bG,bH) = {
356- let bI = getStringValue(this, (toString(as) + z))
357- let bJ = toBase58String(sha256((toBytes(bG) + toBytes(bH))))
358- if (!(Z))
359- then throw("DApp is inactive at this moment")
360- else if (!(containsElement([ag, ah, ai], ar.callerPublicKey)))
361- then throw("Only admin can call this function")
362- else if ((bJ != bI))
363- then throw("vrf Height hash not matching")
364- else {
365- let av = addressFromStringValue(getStringValue(this, (toString(as) + i)))
366- let ax = getIntegerValue(this, (toString(as) + m))
367- let bK = valueOrElse(getInteger(this, (toString(as) + D)), 0)
368- let bL = getIntegerValue(this, (toString(as) + p))
369- let bM = fraction(bL, ax, 100)
370- let bN = getIntegerValue(this, (toString(as) + C))
371- let bO = fraction(bN, ax, 100)
372- let bP = (((bL + bN) + bM) + bO)
373- if ((bK > (bL + bN)))
374- then throw("Can't transfer negative value to project")
375- else {
376- let bx = invoke(V, "unlockNeutrino", [bP, toBase58String(W)], nil)
377- if ((bx == bx))
378- then [IntegerEntry((toString(as) + l), height), ScriptTransfer(av, ((bL + bN) - bK), W), ScriptTransfer(U, (bM + bO), W)]
379- else throw("Strict value is not equal to itself.")
380- }
381- }
382- }
378+@Callable(aE)
379+func claimFreezeToken (aH) = valueOrElse(aC(), {
380+ let ba = valueOrElse(getBoolean(this, (toString(aH) + F)), false)
381+ if (!(isDefined(getInteger(this, (toString(aH) + l)))))
382+ then throw("You can't claim because results are not finalized")
383+ else if (!(ba))
384+ then throw("There are no additional token freezing for this launchpad")
385+ else {
386+ let bQ = fromBase58String(getStringValue(this, (toString(aH) + G)))
387+ let cm = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + ac)), 0)
388+ let aL = valueOrElse(getInteger(this, (toString(aH) + k)), 0)
389+ let aM = valueOrElse(getInteger(this, (toString(aH) + A)), 0)
390+ let cn = getIntegerValue(this, (toString(aH) + H))
391+ let co = ((aL + aM) + cn)
392+ if ((cm == 0))
393+ then throw("You are already claimed your tokens or not paid anything")
394+ else if ((co > height))
395+ then throw(("Your tokens freezed teel " + toString(co)))
396+ else [ScriptTransfer(aE.caller, cm, bQ), IntegerEntry((((toString(aE.caller) + "_") + toString(aH)) + ac), 0)]
397+ }
398+ })
383399
384400
385401
386-@Callable(ar)
387-func claim (as) = {
388- let bQ = valueOrElse(getBoolean(this, (((toString(ar.caller) + "_") + toString(as)) + O)), false)
389- let bR = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + J)), 0)
390- let bC = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + N)), 0)
391- if (!(Z))
392- then throw("DApp is inactive at this moment")
393- else if (!(isDefined(getInteger(this, (toString(as) + l)))))
394- then throw("You can't claim because results are not finalized")
395- else if (bQ)
396- then throw("You are already claimed")
397- else if (if ((bR == 0))
398- then (bC == 0)
399- else false)
400- then throw("You can't claim because you don't buy anything")
401- else {
402- let aZ = fromBase58String(getStringValue(this, (toString(as) + n)))
403- let bS = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + P)), 0)
404- let bT = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + L)), 0)
405- let ax = getIntegerValue(this, (toString(as) + m))
406- let bU = min([bC, bT])
407- let aY = getIntegerValue(this, (toString(as) + r))
408- let ay = getIntegerValue(this, (toString(as) + q))
409- let bV = aj(aZ)
410- let bb = bV._1
411- let bc = bV._2
412- let bd = bV._3
413- let be = fraction(ay, aY, pow(10, 0, bd, 0, 0, DOWN))
414- let aC = getIntegerValue(this, (toString(as) + v))
415- let bW = ((bS * ay) + (bU * aC))
416- let bX = ((bC - bU) * aC)
417- let bY = fraction(fraction(bX, aY, pow(10, 0, bd, 0, 0, DOWN)), (100 + ax), 100)
418- let bZ = fraction(((bR - bS) * be), (100 + ax), 100)
419- if (if ((0 > bY))
420- then true
421- else (0 > bZ))
422- then throw("Error with allowed allocation param or wonned tickets param please contact support")
423- else {
424- let ca = (bY + bZ)
425- let cb = if ((ca > 0))
426- then [ScriptTransfer(ar.caller, ca, W)]
427- else nil
428- let cc = if ((bW > 0))
429- then [ScriptTransfer(ar.caller, bW, aZ)]
430- else nil
431- let bx = if ((ca > 0))
432- then invoke(V, "unlockNeutrino", [ca, toBase58String(W)], nil)
433- else 0
434- if ((bx == bx))
435- then (([BooleanEntry((((toString(ar.caller) + "_") + toString(as)) + O), true)] ++ cc) ++ cb)
436- else throw("Strict value is not equal to itself.")
437- }
438- }
439- }
402+@Callable(aE)
403+func transferBuyAsset (aH,cp) = valueOrElse(aC(), valueOrElse(aD(aE), {
404+ let aK = addressFromStringValue(getStringValue(this, (toString(aH) + i)))
405+ let cq = aF(value(getString(this, (toString(aH) + J))))
406+ let bq = cq._1
407+ let br = cq._2
408+ let bs = cq._3
409+ let bt = cq._4
410+[IntegerEntry((toString(aH) + D), cp), ScriptTransfer(aK, cp, bq)]
411+ }))
440412
441413
442414
443-@Callable(ar)
444-func claimFreezeToken (as) = {
445- let aF = valueOrElse(getBoolean(this, (toString(as) + F)), false)
446- if (!(Z))
447- then throw("DApp is inactive at this moment")
448- else if (!(isDefined(getInteger(this, (toString(as) + l)))))
449- then throw("You can't claim because results are not finalized")
450- else if (!(aF))
451- then throw("There are no additional token freezing for this launchpad")
452- else {
453- let aZ = fromBase58String(getStringValue(this, (toString(as) + G)))
454- let cd = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + Q)), 0)
455- let aw = valueOrElse(getInteger(this, (toString(as) + k)), 0)
456- let aW = valueOrElse(getInteger(this, (toString(as) + A)), 0)
457- let ce = getIntegerValue(this, (toString(as) + H))
458- let cf = ((aw + aW) + ce)
459- if ((cd == 0))
460- then throw("You are already claimed your tokens or not paid anything")
461- else if ((cf > height))
462- then throw(("Your tokens freezed teel " + toString(cf)))
463- else [ScriptTransfer(ar.caller, cd, aZ), IntegerEntry((((toString(ar.caller) + "_") + toString(as)) + Q), 0)]
464- }
465- }
415+@Callable(aE)
416+func shutdown () = valueOrElse(aD(aE), if (!(aB))
417+ then throw("DApp already inactive")
418+ else [BooleanEntry(a, false)])
466419
467420
468421
469-@Callable(ar)
470-func transferUsd (as,cg) = if (!(Z))
471- then throw("DApp is inactive")
472- else if (!(containsElement([ag, ah, ai], ar.callerPublicKey)))
473- then throw("Only admin can call this function")
474- else {
475- let av = addressFromStringValue(getStringValue(this, (toString(as) + i)))
476-[IntegerEntry((toString(as) + D), cg), ScriptTransfer(av, cg, W)]
477- }
422+@Callable(aE)
423+func activate () = valueOrElse(aD(aE), if (aB)
424+ then throw("DApp already active")
425+ else [BooleanEntry(a, true)])
478426
479427
480-
481-@Callable(ar)
482-func shutdown () = if (!(Z))
483- then throw("DApp already inactive")
484- else if (!(containsElement([ag, ah, ai], ar.callerPublicKey)))
485- then throw("Only admin can call this function")
486- else [BooleanEntry(a, false)]
487-
488-
489-
490-@Callable(ar)
491-func activate () = if (Z)
492- then throw("DApp already active")
493- else if (!(containsElement([ag, ah, ai], ar.callerPublicKey)))
494- then throw("Only admin can call this function")
495- else [BooleanEntry(a, true)]
496-
497-
498-@Verifier(ch)
499-func ci () = {
500- let cj = {
501- let ck = if (sigVerify(ch.bodyBytes, ch.proofs[0], ag))
428+@Verifier(cr)
429+func cs () = {
430+ let ct = {
431+ let cu = if (sigVerify(cr.bodyBytes, cr.proofs[0], aq))
502432 then 1
503433 else 0
504- let cl = if (sigVerify(ch.bodyBytes, ch.proofs[1], ah))
434+ let cv = if (sigVerify(cr.bodyBytes, cr.proofs[1], ar))
505435 then 1
506436 else 0
507- let cm = if (sigVerify(ch.bodyBytes, ch.proofs[2], ai))
437+ let cw = if (sigVerify(cr.bodyBytes, cr.proofs[2], as))
508438 then 1
509439 else 0
510- (((ck + cl) + cm) >= 2)
440+ (((cu + cv) + cw) >= 2)
511441 }
512- let cn = if (if (if (sigVerify(ch.bodyBytes, ch.proofs[0], ag))
442+ let cx = if (if (if (sigVerify(cr.bodyBytes, cr.proofs[0], aq))
513443 then true
514- else sigVerify(ch.bodyBytes, ch.proofs[0], ah))
444+ else sigVerify(cr.bodyBytes, cr.proofs[0], ar))
515445 then true
516- else sigVerify(ch.bodyBytes, ch.proofs[0], ai))
446+ else sigVerify(cr.bodyBytes, cr.proofs[0], as))
517447 then true
518- else sigVerify(ch.bodyBytes, ch.proofs[0], X)
519- let ad = ch
520- if ($isInstanceOf(ad, "DataTransaction"))
448+ else sigVerify(cr.bodyBytes, cr.proofs[0], ai)
449+ let an = cr
450+ if ($isInstanceOf(an, "DataTransaction"))
521451 then {
522- let co = ad
523- if (valueOrElse(getBoolean(S, e), false))
524- then cn
452+ let cy = an
453+ if (valueOrElse(getBoolean(ad, e), false))
454+ then cx
525455 else false
526456 }
527- else cj
457+ else ct
528458 }
529459
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "active"
55
66 let b = "admin_pub_1"
77
88 let c = "admin_pub_2"
99
1010 let d = "admin_pub_3"
1111
1212 let e = "launchpad_data_transaction_status"
1313
1414 let f = "launchpad_next_id"
1515
1616 let g = "launchpad_active_id"
1717
1818 let h = "init_caller"
1919
2020 let i = "_address"
2121
2222 let j = "_init_height"
2323
2424 let k = "_start_height"
2525
2626 let l = "_finalise_height"
2727
2828 let m = "_comission"
2929
3030 let n = "_asset_id"
3131
3232 let o = "_total_token_amount"
3333
34-let p = "_total_usdn_sold"
34+let p = "_total_buy_asset_sold"
3535
3636 let q = "_tokens_per_ticket"
3737
3838 let r = "_price_per_token"
3939
4040 let s = "_swop_per_ticket"
4141
4242 let t = "_tickets_swopfi_members"
4343
4444 let u = "_tokens_access_list"
4545
4646 let v = "_tokens_per_allocation"
4747
4848 let w = "_ticket_last_number"
4949
5050 let x = "_SWOP_amount"
5151
5252 let y = "_ref_id"
5353
5454 let z = "_verify_hash"
5555
5656 let A = "_duration"
5757
58-let B = "_total_purchased_usdn_in_marketing"
58+let B = "_total_purchased_buy_asset_in_marketing"
5959
60-let C = "_total_purchased_usdn_in_marketing_finalized"
60+let C = "_total_purchased_buy_asset_in_marketing_finalized"
6161
62-let D = "_transfer_usd"
62+let D = "_transfer_buy_asset"
6363
6464 let E = "_freeze_swop_duration"
6565
6666 let F = "_freeze_additional_token"
6767
6868 let G = "_freeze_token_id"
6969
7070 let H = "_freeze_token_duration"
7171
7272 let I = "_freeze_token_per_ticket"
7373
74-let J = "_bought_tickets"
74+let J = "_buy_token"
7575
76-let K = "_tickets_number"
76+let K = "_claim_params"
7777
78-let L = "_available_purchase_marketing"
78+let L = "_high_competition_comission"
7979
80-let M = "_purchased_usdn_in_marketing"
80+let M = "_high_competition_sale"
8181
82-let N = "_bought_allocations"
82+let N = "_high_competition_ticket_last_number"
8383
84-let O = "_claim_status"
84+let O = "_tickets_high_competition"
8585
86-let P = "_tickets_result"
86+let P = "_total_buy_asset_sold_high_competition"
8787
88-let Q = "_freeze_token_amount"
88+let Q = "_claimed_tokens"
8989
90-let R = 10000
90+let R = "_claimed_buy_tokens"
9191
92-let S = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
92+let S = "_bought_tickets"
9393
94-let T = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
94+let T = "_tickets_number"
9595
96-let U = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
96+let U = "_tickets_number_high_competition"
9797
98-let V = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
98+let V = "_bought_tickets_high_competition"
9999
100-let W = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
100+let W = "_available_purchase_marketing"
101101
102-let X = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
102+let X = "_purchased_buy_asset_in_marketing"
103103
104-let Y = 2
104+let Y = "_bought_allocations"
105105
106-let Z = valueOrElse(getBoolean(this, a), true)
106+let Z = "_claim_status"
107107
108-let aa = valueOrElse(getIntegerValue(this, g), -1)
108+let aa = "_tickets_result"
109109
110-func ab (ac) = {
111- let ad = getString(S, ac)
112- if ($isInstanceOf(ad, "String"))
110+let ab = "_tickets_result_high_competition"
111+
112+let ac = "_freeze_token_amount"
113+
114+let ad = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
115+
116+let ae = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
117+
118+let af = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
119+
120+let ag = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
121+
122+let ah = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
123+
124+let ai = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
125+
126+let aj = 2
127+
128+let ak = valueOrElse(getIntegerValue(this, g), -1)
129+
130+func al (am) = {
131+ let an = getString(ad, am)
132+ if ($isInstanceOf(an, "String"))
113133 then {
114- let ae = ad
115- fromBase58String(ae)
134+ let ao = an
135+ fromBase58String(ao)
116136 }
117137 else {
118- let af = ad
138+ let ap = an
119139 throw("Admin public key is empty")
120140 }
121141 }
122142
123143
124-let ag = ab(b)
144+let aq = al(b)
125145
126-let ah = ab(c)
146+let ar = al(c)
127147
128-let ai = ab(d)
148+let as = al(d)
129149
130-func aj (ak) = {
131- let ad = ak
132- if ($isInstanceOf(ad, "ByteVector"))
150+func at (au) = {
151+ let an = au
152+ if ($isInstanceOf(an, "ByteVector"))
133153 then {
134- let al = ad
135- let am = toBase58String(al)
136- let an = valueOrErrorMessage(assetInfo(al), (("Asset " + am) + " doesn't exist"))
137- $Tuple3(am, an.name, an.decimals)
154+ let av = an
155+ let aw = toBase58String(av)
156+ let ax = valueOrErrorMessage(assetInfo(av), (("Asset " + aw) + " doesn't exist"))
157+ $Tuple3(aw, ax.name, ax.decimals)
138158 }
139- else if ($isInstanceOf(ad, "Unit"))
159+ else if ($isInstanceOf(an, "Unit"))
140160 then {
141- let ao = ad
161+ let ay = an
142162 $Tuple3("WAVES", "WAVES", 8)
143163 }
144164 else throw("Match error")
145165 }
146166
147167
148-func ap () = valueOrElse(getInteger(this, f), 1)
168+func az () = valueOrElse(getInteger(this, f), 1)
149169
150170
151-func aq () = valueOrElse(getInteger(V, ((("rpd_balance_" + toBase58String(W)) + "_") + toString(this))), 0)
171+func aA () = valueOrElse(getInteger(ag, ((("rpd_balance_" + toBase58String(ah)) + "_") + toString(this))), 0)
152172
153173
154-@Callable(ar)
155-func hashingRandom (as,at) = if (!(Z))
156- then throw("DApp is inactive at this moment")
157- else if (!(containsElement([ag, ah, ai], ar.callerPublicKey)))
158- then throw("Only admin can call this function")
159- else [StringEntry((toString(as) + z), at)]
174+let aB = valueOrElse(getBoolean(this, a), true)
175+
176+func aC () = if (aB)
177+ then unit
178+ else throw("DApp is inactive at this moment")
179+
180+
181+func aD (aE) = if (containsElement([aq, ar, as], aE.callerPublicKey))
182+ then unit
183+ else throw("Only admin can call this function")
184+
185+
186+func aF (aG) = if ((aG == "WAVES"))
187+ then $Tuple4(unit, "WAVES", "WAVES", 8)
188+ else {
189+ let aw = aG
190+ let av = fromBase58String(aG)
191+ let ax = valueOrErrorMessage(assetInfo(av), (("Asset " + aw) + " doesn't exist"))
192+ $Tuple4(av, aw, ax.name, ax.decimals)
193+ }
194+
195+
196+@Callable(aE)
197+func hashingRandom (aH,aI) = valueOrElse(aC(), valueOrElse(aD(aE), [StringEntry((toString(aH) + z), aI)]))
160198
161199
162200
163-@Callable(ar)
164-func initCaller (au) = if (!(Z))
165- then throw("DApp is inactive at this moment")
166- else if (!(containsElement([ag, ah, ai], ar.callerPublicKey)))
167- then throw("Only admin can call this function")
168- else [StringEntry(h, au)]
201+@Callable(aE)
202+func initCaller (aJ) = valueOrElse(aC(), valueOrElse(aD(aE), [StringEntry(h, aJ)]))
169203
170204
171205
172-@Callable(ar)
173-func init (av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG) = if (!(Z))
174- then throw("DApp is inactive at this moment")
175- else if ((toString(ar.caller) != valueOrElse(getString(this, h), "")))
176- then throw("Only project admin can call init function")
177- else if ((size(ar.payments) != 1))
178- then throw("One attached payment expected")
179- else if ((height > aw))
180- then throw("Start height must be greater than blockchain height")
181- else if (if (aF)
182- then (size(aG) != 3)
183- else false)
184- then throw("Freeze params list must have 3 items")
185- else {
186- let as = ap()
187- let aH = toString(as)
188- let aI = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
189- let aJ = aI._1
190- let aK = aI._2
191- let aL = aj(aK)
192- let aM = aL._1
193- let aN = aL._2
194- let aO = aL._3
195- let aP = if (aF)
196- then [BooleanEntry((aH + F), true), StringEntry((aH + G), aG[0]), IntegerEntry((aH + H), parseIntValue(aG[1])), IntegerEntry((aH + I), parseIntValue(aG[2]))]
197- else nil
198- ([IntegerEntry((aM + "_launchpad"), as), IntegerEntry(f, (as + 1)), StringEntry((aH + i), av), IntegerEntry((aH + j), height), IntegerEntry((aH + k), aw), IntegerEntry((aH + A), R), IntegerEntry((aH + E), aE), IntegerEntry((aH + o), aJ), StringEntry((aH + n), aM), IntegerEntry((aH + m), ax), IntegerEntry((aH + w), 0), IntegerEntry((aH + q), ay), IntegerEntry((aH + r), az), IntegerEntry((aH + s), aD), IntegerEntry((aH + t), aA), IntegerEntry((aH + u), aB), IntegerEntry((aH + v), aC), IntegerEntry(g, as), StringEntry(h, "")] ++ aP)
199- }
206+@Callable(aE)
207+func init (aK,aL,aM,aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW,aX,aY,aZ,ba,bb) = valueOrElse(aC(), if ((toString(aE.caller) != valueOrElse(getString(this, h), "")))
208+ then throw("Only project admin can call init function")
209+ else if ((size(aE.payments) != 1))
210+ then throw("One attached payment expected")
211+ else if ((height > aL))
212+ then throw("Start height must be greater than blockchain height")
213+ else if (if (ba)
214+ then (size(bb) != 3)
215+ else false)
216+ then throw("Freeze params list must have 3 items")
217+ else {
218+ let aH = az()
219+ let bc = toString(aH)
220+ let bd = $Tuple2(aE.payments[0].amount, aE.payments[0].assetId)
221+ let be = bd._1
222+ let bf = bd._2
223+ let bg = at(bf)
224+ let bh = bg._1
225+ let bi = bg._2
226+ let bj = bg._3
227+ let bk = if (ba)
228+ then [BooleanEntry((bc + F), true), StringEntry((bc + G), bb[0]), IntegerEntry((bc + H), parseIntValue(bb[1])), IntegerEntry((bc + I), parseIntValue(bb[2]))]
229+ else nil
230+ ([IntegerEntry((bh + "_launchpad"), aH), IntegerEntry(f, (aH + 1)), StringEntry((bc + i), aK), IntegerEntry((bc + j), height), IntegerEntry((bc + k), aL), IntegerEntry((bc + A), aM), StringEntry((bc + J), aN), IntegerEntry((bc + E), aV), IntegerEntry((bc + o), be), StringEntry((bc + n), bh), IntegerEntry((bc + m), aO), IntegerEntry((bc + w), 0), IntegerEntry((bc + N), 0), IntegerEntry((bc + q), aP), IntegerEntry((bc + r), aQ), IntegerEntry((bc + s), aU), IntegerEntry((bc + t), aR), IntegerEntry((bc + u), aS), IntegerEntry((bc + v), aT), StringEntry((bc + K), makeString(aW, ",")), BooleanEntry((bc + M), aX), IntegerEntry((bc + L), aY), IntegerEntry((bc + O), aZ), IntegerEntry(g, aH), StringEntry(h, "")] ++ bk)
231+ })
200232
201233
202234
203-@Callable(ar)
204-func commitSwopfiSale (as,aQ) = {
205- let aR = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
206- let aJ = aR._1
207- let aK = aR._2
208- let aS = valueOrElse(getInteger(T, (toString(ar.caller) + x)), 0)
209- let aT = (aS / getIntegerValue(this, (toString(as) + s)))
210- let aU = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + J)), 0)
211- let aV = (aT - aU)
212- let aw = value(getInteger(this, (toString(as) + k)))
213- let aW = value(getInteger(this, (toString(as) + A)))
214- let aF = valueOrElse(getBoolean(this, (toString(as) + F)), false)
215- if (!(Z))
216- then throw("DApp is inactive at this moment")
217- else if ((aa != as))
218- then throw("There is no active launchpad or this launchpad is ended")
219- else if ((aw > height))
220- then throw("Launchpad sale not started yet")
221- else if ((height > (aw + aW)))
222- then throw("Launchpad sale ended")
223- else if (if (!(aF))
224- then if ((size(ar.payments) != 1))
225- then true
226- else (aK != W)
227- else false)
228- then throw("One attached payment in USDN expected")
229- else if (if (aF)
230- then if ((size(ar.payments) != 2))
231- then true
232- else (aK != W)
233- else false)
234- then {
235- let aX = getStringValue(this, (toString(as) + G))
236- throw(("Two attached payments expected: First in USDN, second in " + aX))
237- }
238- else if (if ((0 >= aT))
239- then true
240- else (0 >= aV))
241- then throw("Not enought SWOP in staking to buy tickets")
242- else {
243- let aY = getIntegerValue(this, (toString(as) + r))
244- let ay = getIntegerValue(this, (toString(as) + q))
245- let aZ = fromBase58String(getStringValue(this, (toString(as) + n)))
246- let ba = aj(aZ)
247- let bb = ba._1
248- let bc = ba._2
249- let bd = ba._3
250- let be = fraction(ay, aY, pow(10, 0, bd, 0, 0, DOWN))
251- let bf = fraction(be, getIntegerValue(this, (toString(as) + m)), 100)
252- let bg = (aJ / (be + bf))
253- let bh = min([bg, aV])
254- let bi = (bh * (be + bf))
255- let bj = (aJ - bi)
256- if ((bg == 0))
257- then throw("Not enought USDN to buy tickets")
258- else if ((bj != 0))
259- then throw((((("Wrong payment. To buy " + toString(bh)) + "tickets you need to pay ") + toString(bi)) + "USDN"))
260- else {
261- let aP = if (aF)
262- then {
263- let aX = getStringValue(this, (toString(as) + G))
264- let bk = getIntegerValue(this, (toString(as) + I))
265- let bl = $Tuple2(ar.payments[1].amount, ar.payments[1].assetId)
266- let bm = bl._1
267- let bn = bl._2
268- let bo = aj(aK)
269- let bp = bo._1
270- let bq = bo._2
271- let br = bo._3
272- let bs = (bk * bg)
273- if (if ((bp != aX))
274- then true
275- else (bs != bm))
276- then throw((((("You need to add " + toString(bs)) + " ") + bq) + " as a second payment"))
277- else [IntegerEntry((((toString(ar.caller) + "_") + toString(as)) + Q), bm)]
278- }
279- else nil
280- let bt = valueOrElse(getString(this, (((toString(ar.caller) + "_") + toString(as)) + K)), "")
281- let bu = getIntegerValue(this, (toString(as) + w))
282- let bv = ((toString((bu + 1)) + "-") + toString((bu + bh)))
283- let bw = (bt + (if ((bt != ""))
284- then ("," + bv)
285- else ("" + bv)))
286- let bx = invoke(V, "lockNeutrino", nil, [AttachedPayment(aK, aJ)])
287- if ((bx == bx))
288- then {
289- let by = ([IntegerEntry((((toString(ar.caller) + "_") + toString(as)) + J), (aU + bh)), IntegerEntry((toString(as) + w), (bu + bh)), StringEntry((((toString(ar.caller) + "_") + toString(as)) + K), bw)] ++ aP)
290- if (!(isDefined(getString(this, (((toString(ar.caller) + "_") + toString(as)) + y)))))
291- then (by ++ [StringEntry((((toString(ar.caller) + "_") + toString(as)) + y), aQ)])
292- else by
293- }
294- else throw("Strict value is not equal to itself.")
295- }
296- }
297- }
235+@Callable(aE)
236+func finalise (aH,bl,bm) = valueOrElse(aC(), valueOrElse(aD(aE), {
237+ let bn = getStringValue(this, (toString(aH) + z))
238+ let bo = toBase58String(sha256((toBytes(bl) + toBytes(bm))))
239+ if ((bo != bn))
240+ then throw("vrf Height hash not matching")
241+ else {
242+ let bp = aF(value(getString(this, (toString(aH) + J))))
243+ let bq = bp._1
244+ let br = bp._2
245+ let bs = bp._3
246+ let bt = bp._4
247+ let aK = addressFromStringValue(getStringValue(this, (toString(aH) + i)))
248+ let aO = getIntegerValue(this, (toString(aH) + m))
249+ let bu = getIntegerValue(this, (toString(aH) + L))
250+ let bv = valueOrElse(getInteger(this, (toString(aH) + D)), 0)
251+ let bw = getIntegerValue(this, (toString(aH) + p))
252+ let bx = valueOrElse(getIntegerValue(this, (toString(aH) + P)), 0)
253+ let by = fraction(bw, aO, 100)
254+ let bz = fraction(bx, bu, 100)
255+ let bA = getIntegerValue(this, (toString(aH) + C))
256+ let bB = fraction(bA, aO, 100)
257+ let bC = (((((bw + bA) + by) + bB) + bx) + bz)
258+ if ((bv > (bw + bA)))
259+ then throw("Can't transfer negative value to project")
260+ else {
261+ let bD = if ((bq == ah))
262+ then invoke(ag, "unlockNeutrino", [bC, toBase58String(ah)], nil)
263+ else 0
264+ if ((bD == bD))
265+ then [IntegerEntry((toString(aH) + l), height), ScriptTransfer(aK, (((bw + bx) + bA) - bv), bq), ScriptTransfer(af, ((by + bB) + bz), bq)]
266+ else throw("Strict value is not equal to itself.")
267+ }
268+ }
269+ }))
298270
299271
300272
301-@Callable(ar)
302-func commitAccessListSale (as,aQ) = {
303- let bz = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
304- let aJ = bz._1
305- let aK = bz._2
306- let bA = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + M)), 0)
307- let bB = valueOrElse(getInteger(this, (toString(as) + B)), 0)
308- let bC = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + N)), 0)
309- let ax = getIntegerValue(this, (toString(as) + m))
310- let aY = getIntegerValue(this, (toString(as) + r))
311- let aC = getIntegerValue(this, (toString(as) + v))
312- let aZ = fromBase58String(getStringValue(this, (toString(as) + n)))
313- let bD = aj(aZ)
314- let bb = bD._1
315- let bc = bD._2
316- let bd = bD._3
317- let bE = fraction(fraction(aY, aC, pow(10, 0, bd, 0, 0, DOWN)), (100 + ax), 100)
318- let aw = value(getInteger(this, (toString(as) + k)))
319- let aW = value(getInteger(this, (toString(as) + A)))
320- if (!(Z))
321- then throw("DApp is inactive at this moment")
322- else if ((aa != as))
323- then throw("There is no active launchpad or this launchpad is ended")
324- else if ((aw > height))
325- then throw("Launchpad sale not started yet")
326- else if ((height > (aw + aW)))
327- then throw("Launchpad sale ended")
328- else if (if ((size(ar.payments) != 1))
273+@Callable(aE)
274+func claim (aH) = valueOrElse(aC(), {
275+ let bE = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + S)), 0)
276+ let bF = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + V)), 0)
277+ let bG = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + Y)), 0)
278+ let bH = valueOrElse(getBoolean(this, (((toString(aE.caller) + "_") + toString(aH)) + Z)), false)
279+ let bI = valueOrElse(getInteger(this, (toString(aH) + l)), 0)
280+ if ((bI == 0))
281+ then throw("You can't claim because results are not finalized")
282+ else if (bH)
283+ then throw("You are already claimed")
284+ else if (if (if ((bE == 0))
285+ then (bG == 0)
286+ else false)
287+ then (bF == 0)
288+ else false)
289+ then throw("You can't claim because you don't buy anything")
290+ else {
291+ let bJ = aF(value(getString(this, (toString(aH) + J))))
292+ let bq = bJ._1
293+ let br = bJ._2
294+ let bs = bJ._3
295+ let bt = bJ._4
296+ let bK = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + aa)), 0)
297+ let bL = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + ab)), 0)
298+ let bM = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + W)), 0)
299+ let aO = getIntegerValue(this, (toString(aH) + m))
300+ let bu = getIntegerValue(this, (toString(aH) + L))
301+ let bN = min([bG, bM])
302+ let bO = getIntegerValue(this, (toString(aH) + r))
303+ let aP = getIntegerValue(this, (toString(aH) + q))
304+ let bP = aF(getStringValue(this, (toString(aH) + n)))
305+ let bQ = bP._1
306+ let bR = bP._2
307+ let bS = bP._3
308+ let bT = bP._4
309+ let bU = fraction(aP, bO, pow(10, 0, bT, 0, 0, DOWN))
310+ let aT = getIntegerValue(this, (toString(aH) + v))
311+ let bV = (((bK * aP) + (bN * aT)) + (bL * aP))
312+ let bW = ((bG - bN) * aT)
313+ let bX = fraction(fraction(bW, bO, pow(10, 0, bT, 0, 0, DOWN)), (100 + aO), 100)
314+ let bY = fraction(((bE - bK) * bU), (100 + aO), 100)
315+ let bZ = fraction(((bF - bL) * bU), (100 + bu), 100)
316+ let ca = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + R)), 0)
317+ if (if (if ((0 > bX))
329318 then true
330- else (aK != W))
331- then throw("One attached payment in USDN expected")
332- else if ((bC >= Y))
333- then throw((("You can buy only " + toString(Y)) + "allocations"))
334- else if (if ((bE != aJ))
335- then ((bE * 2) != aJ)
319+ else (0 > bY))
320+ then true
321+ else (0 > bZ))
322+ then throw("Error with allowed allocation param or wonned tickets param please contact support")
323+ else {
324+ let cb = (((bY + bZ) + bX) - ca)
325+ let cc = if ((cb > 0))
326+ then [ScriptTransfer(aE.caller, cb, bq), IntegerEntry((((toString(aE.caller) + "_") + toString(aH)) + R), cb)]
327+ else nil
328+ let bD = if (if ((cb > 0))
329+ then (bq == ah)
336330 else false)
337- then throw((("Wrong payment. You can buy 1 or 2 allocations for " + toString(bE)) + " USDN per allocation"))
338- else {
339- let bF = (aJ / bE)
340- let bx = invoke(V, "lockNeutrino", nil, [AttachedPayment(aK, aJ)])
341- if ((bx == bx))
331+ then invoke(ag, "unlockNeutrino", [cb, toBase58String(ah)], nil)
332+ else 0
333+ if ((bD == bD))
334+ then {
335+ let cd = split(valueOrElse(getString(this, (toString(aH) + K)), ""), ",")
336+ if (if ((size(cd) == 0))
337+ then true
338+ else (cd[0] == "claimAll"))
342339 then {
343- let by = [IntegerEntry((((toString(ar.caller) + "_") + toString(as)) + N), (bC + bF)), IntegerEntry((((toString(ar.caller) + "_") + toString(as)) + M), (bA + aJ)), IntegerEntry((toString(as) + B), (bB + aJ))]
344- if (!(isDefined(getString(this, (((toString(ar.caller) + "_") + toString(as)) + y)))))
345- then (by ++ [StringEntry((((toString(ar.caller) + "_") + toString(as)) + y), aQ)])
346- else by
340+ let ce = if ((bV > 0))
341+ then [ScriptTransfer(aE.caller, bV, bQ)]
342+ else nil
343+ (([BooleanEntry((((toString(aE.caller) + "_") + toString(aH)) + Z), true), IntegerEntry((((toString(aE.caller) + "_") + toString(aH)) + Q), bV)] ++ ce) ++ cc)
347344 }
348- else throw("Strict value is not equal to itself.")
345+ else if ((cd[0] == "claimPeriod"))
346+ then {
347+ let cf = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + Q)), 0)
348+ let cg = value(parseInt(cd[2]))
349+ let ch = (value(parseInt(cd[3])) + bI)
350+ let ci = (cg + ch)
351+ let cj = fraction(bV, value(parseInt(cd[1])), 100)
352+ let ck = (cj + (if ((height > ch))
353+ then (fraction((bV - cj), (min([height, ci]) - ch), cg) - cf)
354+ else (0 - cf)))
355+ let cl = if ((bV >= (cf + ck)))
356+ then [BooleanEntry((((toString(aE.caller) + "_") + toString(aH)) + Z), true)]
357+ else nil
358+ if (if ((ck > 0))
359+ then true
360+ else (cb > 0))
361+ then {
362+ let ce = if ((ck > 0))
363+ then [IntegerEntry((((toString(aE.caller) + "_") + toString(aH)) + Q), (cf + ck)), ScriptTransfer(aE.caller, ck, bQ)]
364+ else nil
365+ (cc ++ ce)
366+ }
367+ else throw("Nothing to claim")
368+ }
369+ else throw("Unknown claim function")
349370 }
350- }
371+ else throw("Strict value is not equal to itself.")
372+ }
373+ }
374+ })
351375
352376
353377
354-@Callable(ar)
355-func finalise (as,bG,bH) = {
356- let bI = getStringValue(this, (toString(as) + z))
357- let bJ = toBase58String(sha256((toBytes(bG) + toBytes(bH))))
358- if (!(Z))
359- then throw("DApp is inactive at this moment")
360- else if (!(containsElement([ag, ah, ai], ar.callerPublicKey)))
361- then throw("Only admin can call this function")
362- else if ((bJ != bI))
363- then throw("vrf Height hash not matching")
364- else {
365- let av = addressFromStringValue(getStringValue(this, (toString(as) + i)))
366- let ax = getIntegerValue(this, (toString(as) + m))
367- let bK = valueOrElse(getInteger(this, (toString(as) + D)), 0)
368- let bL = getIntegerValue(this, (toString(as) + p))
369- let bM = fraction(bL, ax, 100)
370- let bN = getIntegerValue(this, (toString(as) + C))
371- let bO = fraction(bN, ax, 100)
372- let bP = (((bL + bN) + bM) + bO)
373- if ((bK > (bL + bN)))
374- then throw("Can't transfer negative value to project")
375- else {
376- let bx = invoke(V, "unlockNeutrino", [bP, toBase58String(W)], nil)
377- if ((bx == bx))
378- then [IntegerEntry((toString(as) + l), height), ScriptTransfer(av, ((bL + bN) - bK), W), ScriptTransfer(U, (bM + bO), W)]
379- else throw("Strict value is not equal to itself.")
380- }
381- }
382- }
378+@Callable(aE)
379+func claimFreezeToken (aH) = valueOrElse(aC(), {
380+ let ba = valueOrElse(getBoolean(this, (toString(aH) + F)), false)
381+ if (!(isDefined(getInteger(this, (toString(aH) + l)))))
382+ then throw("You can't claim because results are not finalized")
383+ else if (!(ba))
384+ then throw("There are no additional token freezing for this launchpad")
385+ else {
386+ let bQ = fromBase58String(getStringValue(this, (toString(aH) + G)))
387+ let cm = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aH)) + ac)), 0)
388+ let aL = valueOrElse(getInteger(this, (toString(aH) + k)), 0)
389+ let aM = valueOrElse(getInteger(this, (toString(aH) + A)), 0)
390+ let cn = getIntegerValue(this, (toString(aH) + H))
391+ let co = ((aL + aM) + cn)
392+ if ((cm == 0))
393+ then throw("You are already claimed your tokens or not paid anything")
394+ else if ((co > height))
395+ then throw(("Your tokens freezed teel " + toString(co)))
396+ else [ScriptTransfer(aE.caller, cm, bQ), IntegerEntry((((toString(aE.caller) + "_") + toString(aH)) + ac), 0)]
397+ }
398+ })
383399
384400
385401
386-@Callable(ar)
387-func claim (as) = {
388- let bQ = valueOrElse(getBoolean(this, (((toString(ar.caller) + "_") + toString(as)) + O)), false)
389- let bR = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + J)), 0)
390- let bC = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + N)), 0)
391- if (!(Z))
392- then throw("DApp is inactive at this moment")
393- else if (!(isDefined(getInteger(this, (toString(as) + l)))))
394- then throw("You can't claim because results are not finalized")
395- else if (bQ)
396- then throw("You are already claimed")
397- else if (if ((bR == 0))
398- then (bC == 0)
399- else false)
400- then throw("You can't claim because you don't buy anything")
401- else {
402- let aZ = fromBase58String(getStringValue(this, (toString(as) + n)))
403- let bS = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + P)), 0)
404- let bT = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + L)), 0)
405- let ax = getIntegerValue(this, (toString(as) + m))
406- let bU = min([bC, bT])
407- let aY = getIntegerValue(this, (toString(as) + r))
408- let ay = getIntegerValue(this, (toString(as) + q))
409- let bV = aj(aZ)
410- let bb = bV._1
411- let bc = bV._2
412- let bd = bV._3
413- let be = fraction(ay, aY, pow(10, 0, bd, 0, 0, DOWN))
414- let aC = getIntegerValue(this, (toString(as) + v))
415- let bW = ((bS * ay) + (bU * aC))
416- let bX = ((bC - bU) * aC)
417- let bY = fraction(fraction(bX, aY, pow(10, 0, bd, 0, 0, DOWN)), (100 + ax), 100)
418- let bZ = fraction(((bR - bS) * be), (100 + ax), 100)
419- if (if ((0 > bY))
420- then true
421- else (0 > bZ))
422- then throw("Error with allowed allocation param or wonned tickets param please contact support")
423- else {
424- let ca = (bY + bZ)
425- let cb = if ((ca > 0))
426- then [ScriptTransfer(ar.caller, ca, W)]
427- else nil
428- let cc = if ((bW > 0))
429- then [ScriptTransfer(ar.caller, bW, aZ)]
430- else nil
431- let bx = if ((ca > 0))
432- then invoke(V, "unlockNeutrino", [ca, toBase58String(W)], nil)
433- else 0
434- if ((bx == bx))
435- then (([BooleanEntry((((toString(ar.caller) + "_") + toString(as)) + O), true)] ++ cc) ++ cb)
436- else throw("Strict value is not equal to itself.")
437- }
438- }
439- }
402+@Callable(aE)
403+func transferBuyAsset (aH,cp) = valueOrElse(aC(), valueOrElse(aD(aE), {
404+ let aK = addressFromStringValue(getStringValue(this, (toString(aH) + i)))
405+ let cq = aF(value(getString(this, (toString(aH) + J))))
406+ let bq = cq._1
407+ let br = cq._2
408+ let bs = cq._3
409+ let bt = cq._4
410+[IntegerEntry((toString(aH) + D), cp), ScriptTransfer(aK, cp, bq)]
411+ }))
440412
441413
442414
443-@Callable(ar)
444-func claimFreezeToken (as) = {
445- let aF = valueOrElse(getBoolean(this, (toString(as) + F)), false)
446- if (!(Z))
447- then throw("DApp is inactive at this moment")
448- else if (!(isDefined(getInteger(this, (toString(as) + l)))))
449- then throw("You can't claim because results are not finalized")
450- else if (!(aF))
451- then throw("There are no additional token freezing for this launchpad")
452- else {
453- let aZ = fromBase58String(getStringValue(this, (toString(as) + G)))
454- let cd = valueOrElse(getInteger(this, (((toString(ar.caller) + "_") + toString(as)) + Q)), 0)
455- let aw = valueOrElse(getInteger(this, (toString(as) + k)), 0)
456- let aW = valueOrElse(getInteger(this, (toString(as) + A)), 0)
457- let ce = getIntegerValue(this, (toString(as) + H))
458- let cf = ((aw + aW) + ce)
459- if ((cd == 0))
460- then throw("You are already claimed your tokens or not paid anything")
461- else if ((cf > height))
462- then throw(("Your tokens freezed teel " + toString(cf)))
463- else [ScriptTransfer(ar.caller, cd, aZ), IntegerEntry((((toString(ar.caller) + "_") + toString(as)) + Q), 0)]
464- }
465- }
415+@Callable(aE)
416+func shutdown () = valueOrElse(aD(aE), if (!(aB))
417+ then throw("DApp already inactive")
418+ else [BooleanEntry(a, false)])
466419
467420
468421
469-@Callable(ar)
470-func transferUsd (as,cg) = if (!(Z))
471- then throw("DApp is inactive")
472- else if (!(containsElement([ag, ah, ai], ar.callerPublicKey)))
473- then throw("Only admin can call this function")
474- else {
475- let av = addressFromStringValue(getStringValue(this, (toString(as) + i)))
476-[IntegerEntry((toString(as) + D), cg), ScriptTransfer(av, cg, W)]
477- }
422+@Callable(aE)
423+func activate () = valueOrElse(aD(aE), if (aB)
424+ then throw("DApp already active")
425+ else [BooleanEntry(a, true)])
478426
479427
480-
481-@Callable(ar)
482-func shutdown () = if (!(Z))
483- then throw("DApp already inactive")
484- else if (!(containsElement([ag, ah, ai], ar.callerPublicKey)))
485- then throw("Only admin can call this function")
486- else [BooleanEntry(a, false)]
487-
488-
489-
490-@Callable(ar)
491-func activate () = if (Z)
492- then throw("DApp already active")
493- else if (!(containsElement([ag, ah, ai], ar.callerPublicKey)))
494- then throw("Only admin can call this function")
495- else [BooleanEntry(a, true)]
496-
497-
498-@Verifier(ch)
499-func ci () = {
500- let cj = {
501- let ck = if (sigVerify(ch.bodyBytes, ch.proofs[0], ag))
428+@Verifier(cr)
429+func cs () = {
430+ let ct = {
431+ let cu = if (sigVerify(cr.bodyBytes, cr.proofs[0], aq))
502432 then 1
503433 else 0
504- let cl = if (sigVerify(ch.bodyBytes, ch.proofs[1], ah))
434+ let cv = if (sigVerify(cr.bodyBytes, cr.proofs[1], ar))
505435 then 1
506436 else 0
507- let cm = if (sigVerify(ch.bodyBytes, ch.proofs[2], ai))
437+ let cw = if (sigVerify(cr.bodyBytes, cr.proofs[2], as))
508438 then 1
509439 else 0
510- (((ck + cl) + cm) >= 2)
440+ (((cu + cv) + cw) >= 2)
511441 }
512- let cn = if (if (if (sigVerify(ch.bodyBytes, ch.proofs[0], ag))
442+ let cx = if (if (if (sigVerify(cr.bodyBytes, cr.proofs[0], aq))
513443 then true
514- else sigVerify(ch.bodyBytes, ch.proofs[0], ah))
444+ else sigVerify(cr.bodyBytes, cr.proofs[0], ar))
515445 then true
516- else sigVerify(ch.bodyBytes, ch.proofs[0], ai))
446+ else sigVerify(cr.bodyBytes, cr.proofs[0], as))
517447 then true
518- else sigVerify(ch.bodyBytes, ch.proofs[0], X)
519- let ad = ch
520- if ($isInstanceOf(ad, "DataTransaction"))
448+ else sigVerify(cr.bodyBytes, cr.proofs[0], ai)
449+ let an = cr
450+ if ($isInstanceOf(an, "DataTransaction"))
521451 then {
522- let co = ad
523- if (valueOrElse(getBoolean(S, e), false))
524- then cn
452+ let cy = an
453+ if (valueOrElse(getBoolean(ad, e), false))
454+ then cx
525455 else false
526456 }
527- else cj
457+ else ct
528458 }
529459

github/deemru/w8io/873ac7e 
115.97 ms