tx · 2uYMdqGBYKBsNjqKHkowWX7VqFuH4SjWV47wfazXsaze

3MzDGFvPnXVbA4wCacqcVnfVJPwG952KVAg:  -0.01400000 Waves

2021.12.20 15:55 [1842606] smart account 3MzDGFvPnXVbA4wCacqcVnfVJPwG952KVAg > SELF 0.00000000 Waves

{ "type": 13, "id": "2uYMdqGBYKBsNjqKHkowWX7VqFuH4SjWV47wfazXsaze", "fee": 1400000, "feeAssetId": null, "timestamp": 1640004936655, "version": 2, "chainId": 84, "sender": "3MzDGFvPnXVbA4wCacqcVnfVJPwG952KVAg", "senderPublicKey": "CViCXhHrygDDAtVc1uFczxe6ANj9tBz5PGQDS1yWZqgy", "proofs": [ "3ZFT3w8GpL1BrpthWf6ijc1YYMmPnkQYaze4mKc1c2bxjJi1E6iQtPoXFMjHubz5JEHXrT2GSMa9PRbjMvFEoYcz", "3jkstJUEeK4go2riSZrfXUGy8B1yTWBdRJRD96TDE4Gs17QzchQzXJFzQK3YTQgUKD8fx4AZwJ3sYHVMaridFHJP" ], "script": "base64:AAIFAAAAAAAAFEMIAhIECgIBCBIDCgEIEhQKEggBAQgBAQEBAQEBARgEAQEEGBIECgIBCBIECgIBCBIECgIBCBIFCgMBAQgSAwoBARIDCgEBEgQKAgEBEgASABoQCgFBEgtrZXlEdXJhdGlvbhohCgFCEhxrZXlBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGioKAUMSJWtleUFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmdGaW5hbGl6ZWQaGAoBRBITa2V5VHJhbnNmZXJCdXlBc3NldBoZCgFFEhRrZXlGcmVlelN3b3BEdXJhdGlvbhodCgFGEhhrZXlGcmVlemVBZGRpdGlvbmFsVG9rZW4aFQoBRxIQa2V5RnJlZXplVG9rZW5JZBobCgFIEhZrZXlGcmVlemVUb2tlbkR1cmF0aW9uGhwKAUkSF2tleUZyZWV6ZVRva2VuUGVyVGlja2V0GhAKAUoSC2tleUJ1eVRva2VuGhMKAUsSDmtleUNsYWltUGFyYW1zGiAKAUwSG2tleUhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbhobCgFNEhZrZXlIaWdoQ29tcGV0aXRpb25TYWxlGhoKAU4SFWtleUhDVGlja2V0TGFzdE51bWJlchodCgFPEhhrZXlIaWdoQ29tcGV0aXRpb25BbW91bnQaIQoBUBIca2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGRIQxoZCgFREhRrZXlVc2VyQ2xhaW1lZFRva2VucxocCgFSEhdrZXlVc2VyQ2xhaW1lZEJ1eVRva2VucxofCgFTEhprZXlVc2VyQm91Z2h0VGlja2V0c0Ftb3VudBoTCgFUEg5rZXlVc2VyVGlja2V0cxoVCgFVEhBrZXlVc2VySENUaWNrZXRzGiEKAVYSHGtleVVzZXJIQ0JvdWdodFRpY2tldHNBbW91bnQaIAoBVxIba2V5VXNlckF2YWlsYWJsZUFsbG9jYXRpb25zGiUKAVgSIGtleVVzZXJBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGh0KAVkSGGtleVVzZXJCb3VnaHRBbGxvY2F0aW9ucxoXCgFaEhJrZXlVc2VyQ2xhaW1TdGF0dXMaDgoBYRIJa2V5QWN0aXZlGhwKAmFBEhZnZXRBc3NldEluZm9Gcm9tU3RyaW5nGg4KAmFCEghhc3NldFN0choHCgJhQxIBaRoRCgJhRBILbGF1bmNocGFkSWQaCgoCYUUSBGhhc2gaDQoCYUYSB2FkZHJlc3MaFAoCYUcSDnByb2plY3RBZGRyZXNzGhEKAmFIEgtzdGFydEhlaWdodBoOCgJhSRIIZHVyYXRpb24aDgoCYUoSCGJ1eVRva2VuGhAKAmFLEgpjb21taXNzaW9uGhUKAmFMEg90b2tlbnNQZXJUaWNrZXQaEwoCYU0SDXByaWNlUGVyVG9rZW4aGQoCYU4SE3N3b3BmaVRpY2tldHNBbW91bnQaGgoCYU8SFGNhbXBhaWduVG9rZW5zQW1vdW50GhkKAmFQEhN0b2tlbnNQZXJBbGxvY2F0aW9uGhMKAmFREg1zd29wUGVyVGlja2V0GhgKAmFSEhJzd29wRnJlZXplRHVyYXRpb24aEQoCYVMSC2NsYWltUGFyYW1zGhkKAmFUEhNIaWdoQ29tcGV0aXRpb25TYWxlGh4KAmFVEhhoaWdoQ29tcGV0aXRpb25Db21pc3Npb24aIgoCYVYSHGhpZ2hDb21wZXRpdGlvblRpY2tldHNBbW91bnQaGwoCYVcSFWZyZWV6ZUFkZGl0aW9uYWxUb2tlbhoSCgJhWBIMZnJlZXplUGFyYW1zGhQKAmFZEg5sYXVuY2hwYWRJZFN0choRCgJhWhILJHQwNjU2MjY2MzcaIAoCYWESGmtleVVzZXJXaW5uZWRUaWNrZXRzQW1vdW50GhgKAmFiEhJrZXlVc2VyRnJlZXplVG9rZW4aDAoCYWMSBm9yYWNsZRoQCgJhZBIKZ292ZXJuYW5jZRoWCgJhZRIQY29tbWlzc2lvbldhbGxldBoYCgJhZhISc3Rha2luZ1VTRE5BZGRyZXNzGgoKAmFnEgRVU0ROGhgKAmFoEhJhZG1pblB1YktleVN0YWtpbmcaGgoCYWkSFG1heEFsbG9jYXRpb25zQW1vdW50Gg4KAmFqEghpc0FjdGl2ZRoXCgJhaxIRYWN0aXZlTGF1bmNocGFkSWQaEQoCYWwSC2dldEFkbWluUHViGhEKAmFtEgtrZXlBZG1pblB1YhoNCgJhbhIHJG1hdGNoMBoMCgJhbxIGc3RyaW5nGg0KAmFwEgdub3RoaW5nGhIKAmFxEgxhZG1pblB1YktleTEaEgoCYXISDGFkbWluUHViS2V5MhoSCgJhcxIMYWRtaW5QdWJLZXkzGhIKAmF0EgxnZXRBc3NldEluZm8aDQoCYXUSB2Fzc2V0SWQaCAoCYXYSAmlkGg4KAmF3EghzdHJpbmdJZBoKCgJheBIEaW5mbxoLCgJheRIFd2F2ZXMaGAoCYXoSEmdldExhdW5jaHBhZE5leHRJZBoUCgFiEg9rZXlBZG1pblB1YktleTEaGQoCYkESE2NvbW1pc3Npb25QZXJUaWNrZXQaFQoCYkISD2J1eVRpY2tldEFtb3VudBocCgJiQxIWYWxsb3dlZEJ1eVRpY2tldEFtb3VudBoiCgJiRBIcYWxsb3dlZEJ1eVByaWNlV2l0aENvbWlzc2lvbhoMCgJiRRIGY2hhbmdlGhoKAmJGEhRmcmVlemVUb2tlblBlclRpY2tldBoTCgJiRxINJHQwMTI3MjcxMjgxNBoVCgJiSBIPcG10QW1vdW50RnJlZXplGhYKAmJJEhBwbXRBc3NldElkRnJlZXplGhMKAmJKEg0kdDAxMjgzMTEyOTIyGhkKAmJLEhNwbXRGcmVlemVTdHJBc3NldElkGhgKAmJMEhJwbXRGcmVlemVBc3NldE5hbWUaFwoCYk0SEXBtdEZyZWV6ZURlY2ltYWxzGhYKAmJOEhBuZWVkRnJlZXplVG9rZW5zGh4KAmJPEhh1c2VyQm91Z2h0VGlja2V0c051bWJlcnMaHAoCYlASFmxhc3RCb3VnaHRUaWNrZXROdW1iZXIaEQoCYlESC2JvdWdodFJhbmdlGiEKAmJSEhtuZXdVc2VyQm91Z2h0VGlja2V0c051bWJlcnMaCQoCYlMSA2ludhoPCgJiVBIJYmFzZUVudHJ5GhMKAmJVEg0kdDAxNDk2OTE1MDQ0GhMKAmJWEg0kdDAxNTA0OTE1MTk5GhkKAmJXEhN1c2VyVXNkbkluTWFya2V0aW5nGhUKAmJYEg91c2RuSW5NYXJrZXRpbmcaFwoCYlkSEWJvdWdodEFsbG9jYXRpb25zGhMKAmJaEg0kdDAxNTg2ODE2MDEyGg8KAmJhEglwbXRBbW91bnQaEAoCYmISCnBtdEFzc2V0SWQaEQoCYmMSCyR0MDY2NDY2NzE5GhMKAmJkEg1wbXRTdHJBc3NldElkGhIKAmJlEgxwbXRBc3NldE5hbWUaEQoCYmYSC3BtdERlY2ltYWxzGhsKAmJnEhVmcmVlemVBZGRpdGlvbmFsRW50cnkaCwoCYmgSBXJlZklkGhEKAmJpEgskdDA5MzAxOTM3NhoRCgJiahILJHQwOTM4MTk1MzEaEAoCYmsSCmJ1eUFzc2V0SWQaEwoCYmwSDWJ1eUFzc2V0U3RySWQaEgoCYm0SDGJ1eUFzc2V0TmFtZRoWCgJibhIQYnV5QXNzZXREZWNpbWFscxoRCgJibxILc3Rha2VkU3dvcHMaHQoCYnASF2FsbG93ZWRUaWNrZXRzQW1vdW50QWxsGhkKAmJxEhNib3VnaHRUaWNrZXRzQW1vdW50GhoKAmJyEhRhbGxvd2VkVGlja2V0c0Ftb3VudBoTCgJicxINZnJlZXplVG9rZW5JZBoQCgJidBIKdG9rZW5QcmljZRoTCgJidRINJHQwMTE0MTkxMTU2MxoNCgJidhIHdG9rZW5JZBoVCgJidxIPdG9rZW5TdHJBc3NldElkGhQKAmJ4Eg50b2tlbkFzc2V0TmFtZRoTCgJieRINdG9rZW5EZWNpbWFscxoRCgJiehILdGlja2V0UHJpY2UaFAoBYxIPa2V5QWRtaW5QdWJLZXkyGhMKAmNBEg0kdDAyNTk0OTI2MDk5GhMKAmNCEg13b25uZWRUaWNrZXRzGhUKAmNDEg93b25uZWRIQ1RpY2tldHMaGgoCY0QSFGF3YWlsYWJsZUFsbG9jYXRpb25zGhgKAmNFEhJhbGxvd2VkQWxsb2NhdGlvbnMaEwoCY0YSDSR0MDI2ODg4MjcwMzIaGgoCY0cSFHRyYW5zZmVyVG9rZW5zQW1vdW50GiEKAmNIEhtub3RBbGxvd2VkQWxsb2NhdGlvbnNUb2tlbnMaHAoCY0kSFmJ1eUFzc2V0Rm9yQWxsb2NhdGlvbnMaIAoCY0oSGmJ1eUFzc2V0Rm9yVW53b25uZWRUaWNrZXRzGiIKAmNLEhxidXlBc3NldEZvckhDVW53b25uZWRUaWNrZXRzGhUKAmNMEg9jbGFpbWVkQnV5VG9rZW4aHAoCY00SFnJldHVybmVkQnV5QXNzZXRBbW91bnQaFgoCY04SEHRyYW5zZmVyQnV5QXNzZXQaEwoCY08SDWNsYWltZWRQYXJhbXMaFAoCY1ASDnRyYW5zZmVyVG9rZW5zGhMKAmNREg1jbGFpbWVkVG9rZW5zGhEKAmNSEgtzdGFydEFtb3VudBoSCgJjUxIMdW5sb2NrUGVyaW9kGhEKAmNUEgtibG9ja0hlaWdodBoSCgJjVRIMdW5sb2NrSGVpZ2h0GhkKAmNWEhNhbGxvd2VkVG9rZW5zQW1vdW50GhYKAmNXEhBjbGFpbVN0YXR1c0VudHJ5GhcKAmNYEhF1c2VyVG9rZW5zRnJlZXplZBoZCgJjWRITZnJlZXplVG9rZW5EdXJhdGlvbhoUCgJjWhIOYmxvY2tFbmRIZWlnaHQaIgoCY2ESHGFsbG9jYXRpb25QcmljZVdpdGhDb21pc3Npb24aGgoCY2ISFGJ1eUFsbG9jYXRpb25zQW1vdW50GhMKAmNjEg0kdDAxODMyMTE4Mzk2GhMKAmNkEg0kdDAxODQwMTE4NTUxGhsKAmNlEhVib3VnaHRIQ1RpY2tldHNBbW91bnQaGQoCY2YSE2hpZ2hDb21wZXRpdGlvblNhbGUaEwoCY2cSDSR0MDE5ODAwMTk5NDQaGwoCY2gSFWJ1eVByaWNlV2l0aENvbWlzc2lvbhoPCgJjaRIJdnJmSGVpZ2h0GhAKAmNqEgpzZWNyZXRXb3JkGg8KAmNrEglzYXZlZEhhc2gaDgoCY2wSCGNhbGNIYXNoGhMKAmNtEg0kdDAyMjcyOTIyODc5GhIKAmNuEgxjb21taXNzaW9uSEMaGAoCY28SEnRyYW5zZmVyZWRCdXlBc3NldBohCgJjcBIbc3dvcGZpTWVtYmVyc0J1eUFzc2V0QW1vdW50GhwKAmNxEhZzd29wZmlIQ0J1eUFzc2V0QW1vdW50GhwKAmNyEhZzd29wZmlNZW1iZXJzQ29taXNzaW9uGhcKAmNzEhFzd29wZmlIQ0NvbWlzc2lvbhokCgJjdBIedG90YWxBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGhgKAmN1EhJtYXJrZXRpbmdDb21pc3Npb24aEwoCY3YSDXVuc3Rha2VBbW91bnQaEwoCY3cSDWJvdWdodFRpY2tldHMaFQoCY3gSD2JvdWdodEhDVGlja2V0cxoVCgJjeRIPdXNlckNsYWltU3RhdHVzGhQKAmN6Eg5maW5hbGl6ZUhlaWdodBoUCgFkEg9rZXlBZG1pblB1YktleTMaDAoCZGESBmFtb3VudBoTCgJkYhINJHQwMzM0MjgzMzU3OBoICgJkYxICdHgaDAoCZGQSBnZlcmlmeRoZCgJkZRITbXVsdGlTaWduZWRCeUFkbWlucxoYCgJkZhISYWRtaW5QdWJLZXkxU2lnbmVkGhgKAmRnEhJhZG1pblB1YktleTJTaWduZWQaGAoCZGgSEmFkbWluUHViS2V5M1NpZ25lZBoTCgJkaRINc2lnbmVkQnlBZG1pbhoJCgJkahIDZHR4GiYKAWUSIWtleUxhdW5jaHBhZERhdGFUcmFuc2FjdGlvblN0YXR1cxoXCgFmEhJrZXlMYXVuY2hwYWROZXh0SWQaGQoBZxIUa2V5TGF1bmNocGFkQWN0aXZlSWQaEgoBaBINa2V5SW5pdENhbGxlchoPCgFpEgprZXlBZGRyZXNzGhIKAWoSDWtleUluaXRIZWlnaHQaEwoBaxIOa2V5U3RhcnRIZWlnaHQaFgoBbBIRa2V5RmluYWxpc2VIZWlnaHQaEQoBbRIMa2V5Q29taXNzaW9uGg8KAW4SCmtleUFzc2V0SWQaGAoBbxITa2V5VG90YWxUb2tlbkFtb3VudBofCgFwEhprZXlUb3RhbEFtb3VudEJ1eUFzc2V0U29sZBoXCgFxEhJrZXlUb2tlbnNQZXJUaWNrZXQaFQoBchIQa2V5UHJpY2VQZXJUb2tlbhoVCgFzEhBrZXlTd29wUGVyVGlja2V0GhsKAXQSFmtleVN3b3BmaVRpY2tldHNBbW91bnQaHAoBdRIXa2V5Q2FtcGFpZ25Ub2tlbnNBbW91bnQaGwoBdhIWa2V5VG9rZW5zUGVyQWxsb2NhdGlvbhoYCgF3EhNrZXlUaWNrZXRMYXN0TnVtYmVyGhgKAXgSE2tleUdvdmVybmFuY2VTdGFrZWQaEQoBeRIMa2V5VXNlclJlZklkGhIKAXoSDWtleVZlcmlmeUhhc2gAAABGAAAAAAFhAgAAAAZhY3RpdmUAAAAAAWICAAAAC2FkbWluX3B1Yl8xAAAAAAFjAgAAAAthZG1pbl9wdWJfMgAAAAABZAIAAAALYWRtaW5fcHViXzMAAAAAAWUCAAAAIWxhdW5jaHBhZF9kYXRhX3RyYW5zYWN0aW9uX3N0YXR1cwAAAAABZgIAAAARbGF1bmNocGFkX25leHRfaWQAAAAAAWcCAAAAE2xhdW5jaHBhZF9hY3RpdmVfaWQAAAAAAWgCAAAAC2luaXRfY2FsbGVyAAAAAAFpAgAAAAhfYWRkcmVzcwAAAAABagIAAAAMX2luaXRfaGVpZ2h0AAAAAAFrAgAAAA1fc3RhcnRfaGVpZ2h0AAAAAAFsAgAAABBfZmluYWxpc2VfaGVpZ2h0AAAAAAFtAgAAAApfY29taXNzaW9uAAAAAAFuAgAAAAlfYXNzZXRfaWQAAAAAAW8CAAAAE190b3RhbF90b2tlbl9hbW91bnQAAAAAAXACAAAAFV90b3RhbF9idXlfYXNzZXRfc29sZAAAAAABcQIAAAASX3Rva2Vuc19wZXJfdGlja2V0AAAAAAFyAgAAABBfcHJpY2VfcGVyX3Rva2VuAAAAAAFzAgAAABBfc3dvcF9wZXJfdGlja2V0AAAAAAF0AgAAABdfdGlja2V0c19zd29wZmlfbWVtYmVycwAAAAABdQIAAAATX3Rva2Vuc19hY2Nlc3NfbGlzdAAAAAABdgIAAAAWX3Rva2Vuc19wZXJfYWxsb2NhdGlvbgAAAAABdwIAAAAkX3RpY2tldF9sYXN0X251bWJlcl9oaWdoX2NvbXBldGl0aW9uAAAAAAF4AgAAAAxfU1dPUF9hbW91bnQAAAAAAXkCAAAAB19yZWZfaWQAAAAAAXoCAAAADF92ZXJpZnlfaGFzaAAAAAABQQIAAAAJX2R1cmF0aW9uAAAAAAFCAgAAACdfdG90YWxfcHVyY2hhc2VkX2J1eV9hc3NldF9pbl9tYXJrZXRpbmcAAAAAAUMCAAAAMV90b3RhbF9wdXJjaGFzZWRfYnV5X2Fzc2V0X2luX21hcmtldGluZ19maW5hbGl6ZWQAAAAAAUQCAAAAE190cmFuc2Zlcl9idXlfYXNzZXQAAAAAAUUCAAAAFV9mcmVlemVfc3dvcF9kdXJhdGlvbgAAAAABRgIAAAAYX2ZyZWV6ZV9hZGRpdGlvbmFsX3Rva2VuAAAAAAFHAgAAABBfZnJlZXplX3Rva2VuX2lkAAAAAAFIAgAAABZfZnJlZXplX3Rva2VuX2R1cmF0aW9uAAAAAAFJAgAAABhfZnJlZXplX3Rva2VuX3Blcl90aWNrZXQAAAAAAUoCAAAACl9idXlfdG9rZW4AAAAAAUsCAAAADV9jbGFpbV9wYXJhbXMAAAAAAUwCAAAAG19oaWdoX2NvbXBldGl0aW9uX2NvbWlzc2lv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", "height": 1842606, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Fcwu78tyMhrRsmrqvaz5uGubMUngQZqmmYjPC8musL1W Next: GC7PyUHktaX4pznduMtGncZWvTWqx6FZyYzSW4JCqEF1 Diff:
OldNewDifferences
107107
108108 let aa = "_tickets_result"
109109
110-let ab = "_tickets_result_high_competition"
110+let ab = "_freeze_token_amount"
111111
112-let ac = "_freeze_token_amount"
112+let ac = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
113113
114-let ad = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
114+let ad = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
115115
116-let ae = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
116+let ae = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
117117
118-let af = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
118+let af = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
119119
120-let ag = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
120+let ag = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
121121
122-let ah = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
122+let ah = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
123123
124-let ai = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
124+let ai = 2
125125
126-let aj = 2
126+let aj = valueOrElse(getBoolean(this, a), true)
127127
128-let ak = valueOrElse(getBoolean(this, a), true)
128+let ak = valueOrElse(getIntegerValue(this, g), -1)
129129
130-let al = valueOrElse(getIntegerValue(this, g), -1)
131-
132-func am (an) = {
133- let ao = getString(ad, an)
134- if ($isInstanceOf(ao, "String"))
130+func al (am) = {
131+ let an = getString(ac, am)
132+ if ($isInstanceOf(an, "String"))
135133 then {
136- let ap = ao
137- fromBase58String(ap)
134+ let ao = an
135+ fromBase58String(ao)
138136 }
139137 else {
140- let aq = ao
138+ let ap = an
141139 throw("Admin public key is empty")
142140 }
143141 }
144142
145143
146-let ar = am(b)
144+let aq = al(b)
147145
148-let as = am(c)
146+let ar = al(c)
149147
150-let at = am(d)
148+let as = al(d)
151149
152-func au (av) = {
153- let ao = av
154- if ($isInstanceOf(ao, "ByteVector"))
150+func at (au) = {
151+ let an = au
152+ if ($isInstanceOf(an, "ByteVector"))
155153 then {
156- let aw = ao
157- let ax = toBase58String(aw)
158- let ay = valueOrErrorMessage(assetInfo(aw), (("Asset " + ax) + " doesn't exist"))
159- $Tuple3(ax, ay.name, ay.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)
160158 }
161- else if ($isInstanceOf(ao, "Unit"))
159+ else if ($isInstanceOf(an, "Unit"))
162160 then {
163- let az = ao
161+ let ay = an
164162 $Tuple3("WAVES", "WAVES", 8)
165163 }
166164 else throw("Match error")
167165 }
168166
169167
170-func aA () = valueOrElse(getInteger(this, f), 1)
168+func az () = valueOrElse(getInteger(this, f), 1)
171169
172170
173-func aB () = valueOrElse(getInteger(ag, ((("rpd_balance_" + toBase58String(ah)) + "_") + toString(this))), 0)
174-
175-
176-func aC (aD) = if ((aD == "WAVES"))
171+func aA (aB) = if ((aB == "WAVES"))
177172 then $Tuple4(unit, "WAVES", "WAVES", 8)
178173 else {
179- let ax = aD
180- let aw = fromBase58String(aD)
181- let ay = valueOrErrorMessage(assetInfo(aw), (("Asset " + ax) + " doesn't exist"))
182- $Tuple4(aw, ax, ay.name, ay.decimals)
174+ let aw = aB
175+ let av = fromBase58String(aB)
176+ let ax = valueOrErrorMessage(assetInfo(av), (("Asset " + aw) + " doesn't exist"))
177+ $Tuple4(av, aw, ax.name, ax.decimals)
183178 }
184179
185180
186-@Callable(aE)
187-func hashingRandom (aF,aG) = if (!(ak))
181+@Callable(aC)
182+func hashingRandom (aD,aE) = if (!(aj))
188183 then throw("DApp is inactive at this moment")
189- else if (!(containsElement([ar, as, at], aE.callerPublicKey)))
184+ else if (!(containsElement([aq, ar, as], aC.callerPublicKey)))
190185 then throw("Only admin can call this function")
191- else [StringEntry((toString(aF) + z), aG)]
186+ else [StringEntry((toString(aD) + z), aE)]
192187
193188
194189
195-@Callable(aE)
196-func initCaller (aH) = if (!(ak))
190+@Callable(aC)
191+func initCaller (aF) = if (!(aj))
197192 then throw("DApp is inactive at this moment")
198- else if (!(containsElement([ar, as, at], aE.callerPublicKey)))
193+ else if (!(containsElement([aq, ar, as], aC.callerPublicKey)))
199194 then throw("Only admin can call this function")
200- else [StringEntry(h, aH)]
195+ else [StringEntry(h, aF)]
201196
202197
203198
204-@Callable(aE)
205-func init (aI,aJ,aK,aL,aM,aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW,aX,aY,aZ) = if (!(ak))
199+@Callable(aC)
200+func init (aG,aH,aI,aJ,aK,aL,aM,aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW,aX) = if (!(aj))
206201 then throw("DApp is inactive at this moment")
207- else if ((toString(aE.caller) != valueOrElse(getString(this, h), "")))
202+ else if ((toString(aC.caller) != valueOrElse(getString(this, h), "")))
208203 then throw("Only project admin can call init function")
209- else if ((size(aE.payments) != 1))
204+ else if ((size(aC.payments) != 1))
210205 then throw("One attached payment expected")
211- else if ((height > aJ))
206+ else if ((height > aH))
212207 then throw("Start height must be greater than blockchain height")
213- else if (if (aY)
214- then (size(aZ) != 3)
208+ else if (if (aW)
209+ then (size(aX) != 3)
215210 else false)
216211 then throw("Freeze params list must have 3 items")
217212 else {
218- let aF = aA()
219- let ba = toString(aF)
220- let bb = $Tuple2(aE.payments[0].amount, aE.payments[0].assetId)
221- let bc = bb._1
222- let bd = bb._2
223- let be = au(bd)
224- let bf = be._1
225- let bg = be._2
226- let bh = be._3
227- let bi = if (aY)
228- then [BooleanEntry((ba + F), true), StringEntry((ba + G), aZ[0]), IntegerEntry((ba + H), parseIntValue(aZ[1])), IntegerEntry((ba + I), parseIntValue(aZ[2]))]
213+ let aD = az()
214+ let aY = toString(aD)
215+ let aZ = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
216+ let ba = aZ._1
217+ let bb = aZ._2
218+ let bc = at(bb)
219+ let bd = bc._1
220+ let be = bc._2
221+ let bf = bc._3
222+ let bg = if (aW)
223+ then [BooleanEntry((aY + F), true), StringEntry((aY + G), aX[0]), IntegerEntry((aY + H), parseIntValue(aX[1])), IntegerEntry((aY + I), parseIntValue(aX[2]))]
229224 else nil
230- ([IntegerEntry((bf + "_launchpad"), aF), IntegerEntry(f, (aF + 1)), StringEntry((ba + i), aI), IntegerEntry((ba + j), height), IntegerEntry((ba + k), aJ), IntegerEntry((ba + A), aK), StringEntry((ba + J), aL), IntegerEntry((ba + E), aT), IntegerEntry((ba + o), bc), StringEntry((ba + n), bf), IntegerEntry((ba + m), aM), IntegerEntry((ba + w), 0), IntegerEntry((ba + N), 0), IntegerEntry((ba + q), aN), IntegerEntry((ba + r), aO), IntegerEntry((ba + s), aS), IntegerEntry((ba + t), aP), IntegerEntry((ba + u), aQ), IntegerEntry((ba + v), aR), StringEntry((ba + K), makeString(aU, ",")), BooleanEntry((ba + M), aV), IntegerEntry((ba + L), aW), IntegerEntry((ba + O), aX), IntegerEntry(g, aF), StringEntry(h, "")] ++ bi)
225+ ([IntegerEntry((bd + "_launchpad"), aD), IntegerEntry(f, (aD + 1)), StringEntry((aY + i), aG), IntegerEntry((aY + j), height), IntegerEntry((aY + k), aH), IntegerEntry((aY + A), aI), StringEntry((aY + J), aJ), IntegerEntry((aY + E), aR), IntegerEntry((aY + o), ba), StringEntry((aY + n), bd), IntegerEntry((aY + m), aK), IntegerEntry((aY + w), 0), IntegerEntry((aY + N), 0), IntegerEntry((aY + q), aL), IntegerEntry((aY + r), aM), IntegerEntry((aY + s), aQ), IntegerEntry((aY + t), aN), IntegerEntry((aY + u), aO), IntegerEntry((aY + v), aP), StringEntry((aY + K), makeString(aS, ",")), BooleanEntry((aY + M), aT), IntegerEntry((aY + L), aU), IntegerEntry((aY + O), aV), IntegerEntry(g, aD), StringEntry(h, "")] ++ bg)
231226 }
232227
233228
234229
235-@Callable(aE)
236-func commitSwopfiSale (aF,bj) = {
237- let bk = $Tuple2(aE.payments[0].amount, aE.payments[0].assetId)
238- let bc = bk._1
239- let bd = bk._2
240- let bl = aC(value(getString(this, (toString(aF) + J))))
241- let bm = bl._1
242- let bn = bl._2
243- let bo = bl._3
244- let bp = bl._4
245- let bq = valueOrElse(getInteger(ae, (toString(aE.caller) + x)), 0)
246- let br = (bq / getIntegerValue(this, (toString(aF) + s)))
247- let bs = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aF)) + S)), 0)
248- let bt = (br - bs)
249- let aJ = value(getInteger(this, (toString(aF) + k)))
250- let aK = value(getInteger(this, (toString(aF) + A)))
251- let aY = valueOrElse(getBoolean(this, (toString(aF) + F)), false)
252- if (!(ak))
230+@Callable(aC)
231+func commitSwopfiSale (aD,bh) = {
232+ let bi = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
233+ let ba = bi._1
234+ let bb = bi._2
235+ let bj = aA(value(getString(this, (toString(aD) + J))))
236+ let bk = bj._1
237+ let bl = bj._2
238+ let bm = bj._3
239+ let bn = bj._4
240+ let bo = valueOrElse(getInteger(ad, (toString(aC.caller) + x)), 0)
241+ let bp = (bo / getIntegerValue(this, (toString(aD) + s)))
242+ let bq = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + S)), 0)
243+ let br = (bp - bq)
244+ let aH = value(getInteger(this, (toString(aD) + k)))
245+ let aI = value(getInteger(this, (toString(aD) + A)))
246+ let aW = valueOrElse(getBoolean(this, (toString(aD) + F)), false)
247+ if (!(aj))
253248 then throw("DApp is inactive at this moment")
254- else if ((al != aF))
249+ else if ((ak != aD))
255250 then throw("There is no active launchpad or this launchpad is ended")
256- else if ((aJ > height))
251+ else if ((aH > height))
257252 then throw("Launchpad sale not started yet")
258- else if ((height > (aJ + aK)))
253+ else if ((height > (aH + aI)))
259254 then throw("Launchpad sale ended")
260- else if (if (!(aY))
261- then if ((size(aE.payments) != 1))
255+ else if (if (!(aW))
256+ then if ((size(aC.payments) != 1))
262257 then true
263- else (bd != bm)
258+ else (bb != bk)
264259 else false)
265- then throw((("One attached payment in " + bo) + " expected"))
266- else if (if (aY)
267- then if ((size(aE.payments) != 2))
260+ then throw((("One attached payment in " + bm) + " expected"))
261+ else if (if (aW)
262+ then if ((size(aC.payments) != 2))
268263 then true
269- else (bd != bm)
264+ else (bb != bk)
270265 else false)
271266 then {
272- let bu = getStringValue(this, (toString(aF) + G))
273- throw(((("Two attached payments expected: First in " + bo) + ", second in ") + bu))
267+ let bs = getStringValue(this, (toString(aD) + G))
268+ throw(((("Two attached payments expected: First in " + bm) + ", second in ") + bs))
274269 }
275- else if (if ((0 >= br))
270+ else if (if ((0 >= bp))
276271 then true
277- else (0 >= bt))
272+ else (0 >= br))
278273 then throw("Not enought SWOP in staking to buy tickets")
279274 else {
280- let bv = getIntegerValue(this, (toString(aF) + r))
281- let aN = getIntegerValue(this, (toString(aF) + q))
282- let bw = aC(getStringValue(this, (toString(aF) + n)))
283- let bx = bw._1
284- let by = bw._2
285- let bz = bw._3
286- let bA = bw._4
287- let bB = fraction(aN, bv, pow(10, 0, bA, 0, 0, DOWN))
288- let bC = fraction(bB, getIntegerValue(this, (toString(aF) + m)), 100)
289- let bD = (bc / (bB + bC))
290- let bE = min([bD, bt])
291- let bF = (bE * (bB + bC))
292- let bG = (bc - bF)
293- if ((bD == 0))
294- then throw((("Not enought " + bo) + " to buy tickets"))
295- else if ((bG != 0))
296- then throw((((("Wrong payment. To buy " + toString(bE)) + "tickets you need to pay ") + toString(bF)) + bo))
275+ let bt = getIntegerValue(this, (toString(aD) + r))
276+ let aL = getIntegerValue(this, (toString(aD) + q))
277+ let bu = aA(getStringValue(this, (toString(aD) + n)))
278+ let bv = bu._1
279+ let bw = bu._2
280+ let bx = bu._3
281+ let by = bu._4
282+ let bz = fraction(aL, bt, pow(10, 0, by, 0, 0, DOWN))
283+ let bA = fraction(bz, getIntegerValue(this, (toString(aD) + m)), 100)
284+ let bB = (ba / (bz + bA))
285+ let bC = min([bB, br])
286+ let bD = (bC * (bz + bA))
287+ let bE = (ba - bD)
288+ if ((bB == 0))
289+ then throw((("Not enought " + bm) + " to buy tickets"))
290+ else if ((bE != 0))
291+ then throw((((("Wrong payment. To buy " + toString(bC)) + "tickets you need to pay ") + toString(bD)) + bm))
297292 else {
298- let bi = if (aY)
293+ let bg = if (aW)
299294 then {
300- let bu = getStringValue(this, (toString(aF) + G))
301- let bH = getIntegerValue(this, (toString(aF) + I))
302- let bI = $Tuple2(aE.payments[1].amount, aE.payments[1].assetId)
303- let bJ = bI._1
304- let bK = bI._2
305- let bL = au(bd)
306- let bM = bL._1
307- let bN = bL._2
308- let bO = bL._3
309- let bP = (bH * bD)
310- if (if ((bM != bu))
295+ let bs = getStringValue(this, (toString(aD) + G))
296+ let bF = getIntegerValue(this, (toString(aD) + I))
297+ let bG = $Tuple2(aC.payments[1].amount, aC.payments[1].assetId)
298+ let bH = bG._1
299+ let bI = bG._2
300+ let bJ = at(bb)
301+ let bK = bJ._1
302+ let bL = bJ._2
303+ let bM = bJ._3
304+ let bN = (bF * bB)
305+ if (if ((bK != bs))
311306 then true
312- else (bP != bJ))
313- then throw((((("You need to add " + toString(bP)) + " ") + bN) + " as a second payment"))
314- else [IntegerEntry((((toString(aE.caller) + "_") + toString(aF)) + ac), bJ)]
307+ else (bN != bH))
308+ then throw((((("You need to add " + toString(bN)) + " ") + bL) + " as a second payment"))
309+ else [IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + ab), bH)]
315310 }
316311 else nil
317- let bQ = valueOrElse(getString(this, (((toString(aE.caller) + "_") + toString(aF)) + T)), "")
318- let bR = getIntegerValue(this, (toString(aF) + w))
319- let bS = ((toString((bR + 1)) + "-") + toString((bR + bE)))
320- let bT = (bQ + (if ((bQ != ""))
321- then ("," + bS)
322- else ("" + bS)))
323- let bU = if ((bm == ah))
324- then invoke(ag, "lockNeutrino", nil, [AttachedPayment(bd, bc)])
312+ let bO = valueOrElse(getString(this, (((toString(aC.caller) + "_") + toString(aD)) + T)), "")
313+ let bP = getIntegerValue(this, (toString(aD) + w))
314+ let bQ = ((toString((bP + 1)) + "-") + toString((bP + bC)))
315+ let bR = (bO + (if ((bO != ""))
316+ then ("," + bQ)
317+ else ("" + bQ)))
318+ let bS = if ((bk == ag))
319+ then invoke(af, "lockNeutrino", nil, [AttachedPayment(bb, ba)])
325320 else 0
326- if ((bU == bU))
321+ if ((bS == bS))
327322 then {
328- let bV = ([IntegerEntry((((toString(aE.caller) + "_") + toString(aF)) + S), (bs + bE)), IntegerEntry((toString(aF) + w), (bR + bE)), StringEntry((((toString(aE.caller) + "_") + toString(aF)) + T), bT)] ++ bi)
329- if (!(isDefined(getString(this, (((toString(aE.caller) + "_") + toString(aF)) + y)))))
330- then (bV ++ [StringEntry((((toString(aE.caller) + "_") + toString(aF)) + y), bj)])
331- else bV
323+ let bT = ([IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + S), (bq + bC)), IntegerEntry((toString(aD) + w), (bP + bC)), StringEntry((((toString(aC.caller) + "_") + toString(aD)) + T), bR)] ++ bg)
324+ if (!(isDefined(getString(this, (((toString(aC.caller) + "_") + toString(aD)) + y)))))
325+ then (bT ++ [StringEntry((((toString(aC.caller) + "_") + toString(aD)) + y), bh)])
326+ else bT
332327 }
333328 else throw("Strict value is not equal to itself.")
334329 }
337332
338333
339334
340-@Callable(aE)
341-func commitAccessListSale (aF,bj) = {
342- let bW = $Tuple2(aE.payments[0].amount, aE.payments[0].assetId)
343- let bc = bW._1
344- let bd = bW._2
345- let bX = aC(value(getString(this, (toString(aF) + J))))
346- let bm = bX._1
347- let bn = bX._2
348- let bo = bX._3
349- let bp = bX._4
350- let bY = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aF)) + X)), 0)
351- let bZ = valueOrElse(getInteger(this, (toString(aF) + B)), 0)
352- let ca = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aF)) + Y)), 0)
353- let aM = getIntegerValue(this, (toString(aF) + m))
354- let bv = getIntegerValue(this, (toString(aF) + r))
355- let aR = getIntegerValue(this, (toString(aF) + v))
356- let cb = aC(getStringValue(this, (toString(aF) + n)))
357- let bx = cb._1
358- let by = cb._2
359- let bz = cb._3
360- let bA = cb._4
361- let cc = fraction(fraction(bv, aR, pow(10, 0, bA, 0, 0, DOWN)), (100 + aM), 100)
362- let aJ = value(getInteger(this, (toString(aF) + k)))
363- let aK = value(getInteger(this, (toString(aF) + A)))
364- if (!(ak))
335+@Callable(aC)
336+func commitAccessListSale (aD,bh) = {
337+ let bU = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
338+ let ba = bU._1
339+ let bb = bU._2
340+ let bV = aA(value(getString(this, (toString(aD) + J))))
341+ let bk = bV._1
342+ let bl = bV._2
343+ let bm = bV._3
344+ let bn = bV._4
345+ let bW = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + X)), 0)
346+ let bX = valueOrElse(getInteger(this, (toString(aD) + B)), 0)
347+ let bY = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + Y)), 0)
348+ let aK = getIntegerValue(this, (toString(aD) + m))
349+ let bt = getIntegerValue(this, (toString(aD) + r))
350+ let aP = getIntegerValue(this, (toString(aD) + v))
351+ let bZ = aA(getStringValue(this, (toString(aD) + n)))
352+ let bv = bZ._1
353+ let bw = bZ._2
354+ let bx = bZ._3
355+ let by = bZ._4
356+ let ca = fraction(fraction(bt, aP, pow(10, 0, by, 0, 0, DOWN)), (100 + aK), 100)
357+ let aH = value(getInteger(this, (toString(aD) + k)))
358+ let aI = value(getInteger(this, (toString(aD) + A)))
359+ if (!(aj))
365360 then throw("DApp is inactive at this moment")
366- else if ((al != aF))
361+ else if ((ak != aD))
367362 then throw("There is no active launchpad or this launchpad is ended")
368- else if ((aJ > height))
363+ else if ((aH > height))
369364 then throw("Launchpad sale not started yet")
370- else if ((height > (aJ + aK)))
365+ else if ((height > (aH + aI)))
371366 then throw("Launchpad sale ended")
372- else if (if ((size(aE.payments) != 1))
367+ else if (if ((size(aC.payments) != 1))
373368 then true
374- else (bd != bm))
375- then throw((("One attached payment in " + bo) + " expected"))
376- else if ((ca >= aj))
377- then throw((("You can buy only " + toString(aj)) + "allocations"))
378- else if (if ((cc != bc))
379- then ((cc * 2) != bc)
369+ else (bb != bk))
370+ then throw((("One attached payment in " + bm) + " expected"))
371+ else if ((bY >= ai))
372+ then throw((("You can buy only " + toString(ai)) + "allocations"))
373+ else if (if ((ca != ba))
374+ then ((ca * 2) != ba)
380375 else false)
381- then throw(((("Wrong payment. You can buy 1 or 2 allocations for " + toString(cc)) + bo) + " per allocation"))
376+ then throw(((("Wrong payment. You can buy 1 or 2 allocations for " + toString(ca)) + bm) + " per allocation"))
382377 else {
383- let cd = (bc / cc)
384- let bU = if ((bm == ah))
385- then invoke(ag, "lockNeutrino", nil, [AttachedPayment(bd, bc)])
378+ let cb = (ba / ca)
379+ let bS = if ((bk == ag))
380+ then invoke(af, "lockNeutrino", nil, [AttachedPayment(bb, ba)])
386381 else 0
387- if ((bU == bU))
382+ if ((bS == bS))
388383 then {
389- let bV = [IntegerEntry((((toString(aE.caller) + "_") + toString(aF)) + Y), (ca + cd)), IntegerEntry((((toString(aE.caller) + "_") + toString(aF)) + X), (bY + bc)), IntegerEntry((toString(aF) + B), (bZ + bc))]
390- if (!(isDefined(getString(this, (((toString(aE.caller) + "_") + toString(aF)) + y)))))
391- then (bV ++ [StringEntry((((toString(aE.caller) + "_") + toString(aF)) + y), bj)])
392- else bV
384+ let bT = [IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + Y), (bY + cb)), IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + X), (bW + ba)), IntegerEntry((toString(aD) + B), (bX + ba))]
385+ if (!(isDefined(getString(this, (((toString(aC.caller) + "_") + toString(aD)) + y)))))
386+ then (bT ++ [StringEntry((((toString(aC.caller) + "_") + toString(aD)) + y), bh)])
387+ else bT
393388 }
394389 else throw("Strict value is not equal to itself.")
395390 }
397392
398393
399394
400-@Callable(aE)
401-func commitHighCompetitionSale (aF,bj) = {
402- let ce = $Tuple2(aE.payments[0].amount, aE.payments[0].assetId)
403- let bc = ce._1
404- let bd = ce._2
405- let cf = aC(value(getString(this, (toString(aF) + J))))
406- let bm = cf._1
407- let bn = cf._2
408- let bo = cf._3
409- let bp = cf._4
410- let aJ = value(getInteger(this, (toString(aF) + k)))
411- let aK = value(getInteger(this, (toString(aF) + A)))
412- let cg = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aF)) + V)), 0)
413- let ch = valueOrElse(getBoolean(this, (toString(aF) + M)), false)
414- if (!(ak))
395+@Callable(aC)
396+func commitHighCompetitionSale (aD,bh) = {
397+ let cc = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
398+ let ba = cc._1
399+ let bb = cc._2
400+ let cd = aA(value(getString(this, (toString(aD) + J))))
401+ let bk = cd._1
402+ let bl = cd._2
403+ let bm = cd._3
404+ let bn = cd._4
405+ let aH = value(getInteger(this, (toString(aD) + k)))
406+ let aI = value(getInteger(this, (toString(aD) + A)))
407+ let ce = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + V)), 0)
408+ let cf = valueOrElse(getBoolean(this, (toString(aD) + M)), false)
409+ if (!(aj))
415410 then throw("DApp is inactive at this moment")
416- else if ((al != aF))
411+ else if ((ak != aD))
417412 then throw("There is no active launchpad or this launchpad is ended")
418- else if (!(ch))
413+ else if (!(cf))
419414 then throw("There is no high competition sale for this launchpad")
420- else if ((aJ > height))
415+ else if ((aH > height))
421416 then throw("Launchpad sale not started yet")
422- else if ((height > (aJ + aK)))
417+ else if ((height > (aH + aI)))
423418 then throw("Launchpad sale ended")
424- else if (if ((size(aE.payments) != 1))
419+ else if (if ((size(aC.payments) != 1))
425420 then true
426- else (bd != bm))
427- then throw((("One attached payment in " + bo) + " expected"))
421+ else (bb != bk))
422+ then throw((("One attached payment in " + bm) + " expected"))
428423 else {
429- let bv = getIntegerValue(this, (toString(aF) + r))
430- let aN = getIntegerValue(this, (toString(aF) + q))
431- let ci = aC(getStringValue(this, (toString(aF) + n)))
432- let bx = ci._1
433- let by = ci._2
434- let bz = ci._3
435- let bA = ci._4
436- let bB = fraction(aN, bv, pow(10, 0, bA, 0, 0, DOWN))
437- let bC = fraction(bB, getIntegerValue(this, (toString(aF) + L)), 100)
438- let bD = (bc / (bB + bC))
439- let cj = (bD * (bB + bC))
440- let bG = (bc - cj)
441- if ((bD == 0))
442- then throw((("Not enought " + bo) + " to buy tickets"))
443- else if ((bG != 0))
444- then throw((((("Wrong payment. To buy " + toString(bD)) + "tickets you need to pay ") + toString(cj)) + bo))
424+ let bt = getIntegerValue(this, (toString(aD) + r))
425+ let aL = getIntegerValue(this, (toString(aD) + q))
426+ let cg = aA(getStringValue(this, (toString(aD) + n)))
427+ let bv = cg._1
428+ let bw = cg._2
429+ let bx = cg._3
430+ let by = cg._4
431+ let bz = fraction(aL, bt, pow(10, 0, by, 0, 0, DOWN))
432+ let bA = fraction(bz, getIntegerValue(this, (toString(aD) + L)), 100)
433+ let bB = (ba / (bz + bA))
434+ let ch = (bB * (bz + bA))
435+ let bE = (ba - ch)
436+ if ((bB == 0))
437+ then throw((("Not enought " + bm) + " to buy tickets"))
438+ else if ((bE != 0))
439+ then throw((((("Wrong payment. To buy " + toString(bB)) + "tickets you need to pay ") + toString(ch)) + bm))
445440 else {
446- let bQ = valueOrElse(getString(this, (((toString(aE.caller) + "_") + toString(aF)) + U)), "")
447- let bR = getIntegerValue(this, (toString(aF) + N))
448- let bS = ((toString((bR + 1)) + "-") + toString((bR + bD)))
449- let bT = (bQ + (if ((bQ != ""))
450- then ("," + bS)
451- else ("" + bS)))
452- let bU = if ((bm == ah))
453- then invoke(ag, "lockNeutrino", nil, [AttachedPayment(bd, bc)])
441+ let bO = valueOrElse(getString(this, (((toString(aC.caller) + "_") + toString(aD)) + U)), "")
442+ let bP = getIntegerValue(this, (toString(aD) + N))
443+ let bQ = ((toString((bP + 1)) + "-") + toString((bP + bB)))
444+ let bR = (bO + (if ((bO != ""))
445+ then ("," + bQ)
446+ else ("" + bQ)))
447+ let bS = if ((bk == ag))
448+ then invoke(af, "lockNeutrino", nil, [AttachedPayment(bb, ba)])
454449 else 0
455- if ((bU == bU))
450+ if ((bS == bS))
456451 then {
457- let bV = [IntegerEntry((((toString(aE.caller) + "_") + toString(aF)) + V), (cg + bD)), IntegerEntry((toString(aF) + N), (bR + bD)), StringEntry((((toString(aE.caller) + "_") + toString(aF)) + U), bT)]
458- if (!(isDefined(getString(this, (((toString(aE.caller) + "_") + toString(aF)) + y)))))
459- then (bV ++ [StringEntry((((toString(aE.caller) + "_") + toString(aF)) + y), bj)])
460- else bV
452+ let bT = [IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + V), (ce + bB)), IntegerEntry((toString(aD) + N), (bP + bB)), StringEntry((((toString(aC.caller) + "_") + toString(aD)) + U), bR)]
453+ if (!(isDefined(getString(this, (((toString(aC.caller) + "_") + toString(aD)) + y)))))
454+ then (bT ++ [StringEntry((((toString(aC.caller) + "_") + toString(aD)) + y), bh)])
455+ else bT
461456 }
462457 else throw("Strict value is not equal to itself.")
463458 }
466461
467462
468463
469-@Callable(aE)
470-func finalise (aF,ck,cl) = {
471- let cm = getStringValue(this, (toString(aF) + z))
472- let cn = toBase58String(sha256((toBytes(ck) + toBytes(cl))))
473- if (!(ak))
464+@Callable(aC)
465+func finalise (aD,ci,cj) = {
466+ let ck = getStringValue(this, (toString(aD) + z))
467+ let cl = toBase58String(sha256((toBytes(ci) + toBytes(cj))))
468+ if (!(aj))
474469 then throw("DApp is inactive at this moment")
475- else if (!(containsElement([ar, as, at], aE.callerPublicKey)))
470+ else if (!(containsElement([aq, ar, as], aC.callerPublicKey)))
476471 then throw("Only admin can call this function")
477- else if ((cn != cm))
472+ else if ((cl != ck))
478473 then throw("vrf Height hash not matching")
479474 else {
480- let co = aC(value(getString(this, (toString(aF) + J))))
481- let bm = co._1
482- let bn = co._2
483- let bo = co._3
484- let bp = co._4
485- let aI = addressFromStringValue(getStringValue(this, (toString(aF) + i)))
486- let aM = getIntegerValue(this, (toString(aF) + m))
487- let cp = getIntegerValue(this, (toString(aF) + L))
488- let cq = valueOrElse(getInteger(this, (toString(aF) + D)), 0)
489- let cr = getIntegerValue(this, (toString(aF) + p))
490- let cs = valueOrElse(getIntegerValue(this, (toString(aF) + P)), 0)
491- let ct = fraction(cr, aM, 100)
492- let cu = fraction(cs, cp, 100)
493- let cv = getIntegerValue(this, (toString(aF) + C))
494- let cw = fraction(cv, aM, 100)
495- let cx = (((((cr + cv) + ct) + cw) + cs) + cu)
496- if ((cq > (cr + cv)))
475+ let cm = aA(value(getString(this, (toString(aD) + J))))
476+ let bk = cm._1
477+ let bl = cm._2
478+ let bm = cm._3
479+ let bn = cm._4
480+ let aG = addressFromStringValue(getStringValue(this, (toString(aD) + i)))
481+ let aK = getIntegerValue(this, (toString(aD) + m))
482+ let cn = getIntegerValue(this, (toString(aD) + L))
483+ let co = valueOrElse(getInteger(this, (toString(aD) + D)), 0)
484+ let cp = getIntegerValue(this, (toString(aD) + p))
485+ let cq = valueOrElse(getIntegerValue(this, (toString(aD) + P)), 0)
486+ let cr = fraction(cp, aK, 100)
487+ let cs = fraction(cq, cn, 100)
488+ let ct = getIntegerValue(this, (toString(aD) + C))
489+ let cu = fraction(ct, aK, 100)
490+ let cv = (((((cp + ct) + cr) + cu) + cq) + cs)
491+ if ((co > (cp + ct)))
497492 then throw("Can't transfer negative value to project")
498493 else {
499- let bU = if ((bm == ah))
500- then invoke(ag, "unlockNeutrino", [cx, toBase58String(ah)], nil)
494+ let bS = if ((bk == ag))
495+ then invoke(af, "unlockNeutrino", [cv, toBase58String(ag)], nil)
501496 else 0
502- if ((bU == bU))
503- then [IntegerEntry((toString(aF) + l), height), ScriptTransfer(aI, ((cr + cv) - cq), bm), ScriptTransfer(af, ((ct + cw) + cu), bm)]
497+ if ((bS == bS))
498+ then [IntegerEntry((toString(aD) + l), height), ScriptTransfer(aG, ((cp + ct) - co), bk), ScriptTransfer(ae, ((cr + cu) + cs), bk)]
504499 else throw("Strict value is not equal to itself.")
505500 }
506501 }
507502 }
508503
509504
510-@Verifier(cy)
511-func cz () = {
512- let cA = {
513- let cB = if (sigVerify(cy.bodyBytes, cy.proofs[0], ar))
505+
506+@Callable(aC)
507+func claim (aD) = {
508+ let cw = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + S)), 0)
509+ let cx = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + V)), 0)
510+ let bY = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + Y)), 0)
511+ let cy = valueOrElse(getBoolean(this, (((toString(aC.caller) + "_") + toString(aD)) + Z)), false)
512+ let cz = valueOrElse(getInteger(this, (toString(aD) + l)), 0)
513+ if (!(aj))
514+ then throw("DApp is inactive at this moment")
515+ else if ((cz == 0))
516+ then throw("You can't claim because results are not finalized")
517+ else if (cy)
518+ then throw("You are already claimed")
519+ else if (if (if ((cw == 0))
520+ then (bY == 0)
521+ else false)
522+ then (cx == 0)
523+ else false)
524+ then throw("You can't claim because you don't buy anything")
525+ else {
526+ let cA = aA(value(getString(this, (toString(aD) + J))))
527+ let bk = cA._1
528+ let bl = cA._2
529+ let bm = cA._3
530+ let bn = cA._4
531+ let cB = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + aa)), 0)
532+ let cC = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + aa)), 0)
533+ let cD = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + W)), 0)
534+ let aK = getIntegerValue(this, (toString(aD) + m))
535+ let cE = min([bY, cD])
536+ let bt = getIntegerValue(this, (toString(aD) + r))
537+ let aL = getIntegerValue(this, (toString(aD) + q))
538+ let cF = aA(getStringValue(this, (toString(aD) + n)))
539+ let bv = cF._1
540+ let bw = cF._2
541+ let bx = cF._3
542+ let by = cF._4
543+ let bz = fraction(aL, bt, pow(10, 0, by, 0, 0, DOWN))
544+ let aP = getIntegerValue(this, (toString(aD) + v))
545+ let cG = (((cB * aL) + (cE * aP)) + (cC * aL))
546+ let cH = ((bY - cE) * aP)
547+ let cI = fraction(fraction(cH, bt, pow(10, 0, by, 0, 0, DOWN)), (100 + aK), 100)
548+ let cJ = fraction(((cw - cB) * bz), (100 + aK), 100)
549+ let cK = fraction(((cx - cC) * bz), (100 + aK), 100)
550+ let cL = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + R)), 0)
551+ if (if (if ((0 > cI))
552+ then true
553+ else (0 > cJ))
554+ then true
555+ else (0 > cK))
556+ then throw("Error with allowed allocation param or wonned tickets param please contact support")
557+ else {
558+ let cM = ((cJ + cK) - cL)
559+ let cN = if ((cM > 0))
560+ then [ScriptTransfer(aC.caller, cM, bk), IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + R), cM)]
561+ else nil
562+ let bS = if (if ((cM > 0))
563+ then (bk == ag)
564+ else false)
565+ then invoke(af, "unlockNeutrino", [cM, toBase58String(ag)], nil)
566+ else 0
567+ if ((bS == bS))
568+ then {
569+ let cO = split(valueOrElse(getString(this, K), ""), ",")
570+ if (if ((size(cO) == 0))
571+ then true
572+ else (cO[0] == "claimAll"))
573+ then {
574+ let cP = if ((cG > 0))
575+ then [ScriptTransfer(aC.caller, cG, bv)]
576+ else nil
577+ (([BooleanEntry((((toString(aC.caller) + "_") + toString(aD)) + Z), true), IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + Q), cG)] ++ cP) ++ cN)
578+ }
579+ else if ((cO[0] == "claimPeriod"))
580+ then {
581+ let cQ = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + Q)), 0)
582+ let cR = value(parseInt(cO[0]))
583+ let cS = value(parseInt(cO[0]))
584+ let cT = (value(parseInt(cO[0])) + cz)
585+ let cU = ((cS + cz) + cT)
586+ let cV = (fraction(cG, value(parseInt(cO[0])), 100) + (if ((height > cT))
587+ then fraction(cG, (height - cT), cS)
588+ else (0 - cQ)))
589+ let cW = if ((cG >= (cQ + cV)))
590+ then [BooleanEntry((((toString(aC.caller) + "_") + toString(aD)) + Z), true)]
591+ else nil
592+ if (if ((cV > 0))
593+ then true
594+ else (cM > 0))
595+ then {
596+ let cP = if ((cV > 0))
597+ then [IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + Q), (cQ + cV)), ScriptTransfer(aC.caller, cV, bv)]
598+ else nil
599+ (cN ++ cP)
600+ }
601+ else throw("Nothing to claim")
602+ }
603+ else throw("Error whith claim params: unknown function")
604+ }
605+ else throw("Strict value is not equal to itself.")
606+ }
607+ }
608+ }
609+
610+
611+
612+@Callable(aC)
613+func claimFreezeToken (aD) = {
614+ let aW = valueOrElse(getBoolean(this, (toString(aD) + F)), false)
615+ if (!(aj))
616+ then throw("DApp is inactive at this moment")
617+ else if (!(isDefined(getInteger(this, (toString(aD) + l)))))
618+ then throw("You can't claim because results are not finalized")
619+ else if (!(aW))
620+ then throw("There are no additional token freezing for this launchpad")
621+ else {
622+ let bv = fromBase58String(getStringValue(this, (toString(aD) + G)))
623+ let cX = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + ab)), 0)
624+ let aH = valueOrElse(getInteger(this, (toString(aD) + k)), 0)
625+ let aI = valueOrElse(getInteger(this, (toString(aD) + A)), 0)
626+ let cY = getIntegerValue(this, (toString(aD) + H))
627+ let cZ = ((aH + aI) + cY)
628+ if ((cX == 0))
629+ then throw("You are already claimed your tokens or not paid anything")
630+ else if ((cZ > height))
631+ then throw(("Your tokens freezed teel " + toString(cZ)))
632+ else [ScriptTransfer(aC.caller, cX, bv), IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + ab), 0)]
633+ }
634+ }
635+
636+
637+
638+@Callable(aC)
639+func transferBuyAsset (aD,da) = if (!(aj))
640+ then throw("DApp is inactive")
641+ else if (!(containsElement([aq, ar, as], aC.callerPublicKey)))
642+ then throw("Only admin can call this function")
643+ else {
644+ let aG = addressFromStringValue(getStringValue(this, (toString(aD) + i)))
645+ let db = aA(value(getString(this, (toString(aD) + J))))
646+ let bk = db._1
647+ let bl = db._2
648+ let bm = db._3
649+ let bn = db._4
650+[IntegerEntry((toString(aD) + D), da), ScriptTransfer(aG, da, bk)]
651+ }
652+
653+
654+
655+@Callable(aC)
656+func shutdown () = if (!(aj))
657+ then throw("DApp already inactive")
658+ else if (!(containsElement([aq, ar, as], aC.callerPublicKey)))
659+ then throw("Only admin can call this function")
660+ else [BooleanEntry(a, false)]
661+
662+
663+
664+@Callable(aC)
665+func activate () = if (aj)
666+ then throw("DApp already active")
667+ else if (!(containsElement([aq, ar, as], aC.callerPublicKey)))
668+ then throw("Only admin can call this function")
669+ else [BooleanEntry(a, true)]
670+
671+
672+@Verifier(dc)
673+func dd () = {
674+ let de = {
675+ let df = if (sigVerify(dc.bodyBytes, dc.proofs[0], aq))
514676 then 1
515677 else 0
516- let cC = if (sigVerify(cy.bodyBytes, cy.proofs[1], as))
678+ let dg = if (sigVerify(dc.bodyBytes, dc.proofs[1], ar))
517679 then 1
518680 else 0
519- let cD = if (sigVerify(cy.bodyBytes, cy.proofs[2], at))
681+ let dh = if (sigVerify(dc.bodyBytes, dc.proofs[2], as))
520682 then 1
521683 else 0
522- (((cB + cC) + cD) >= 2)
684+ (((df + dg) + dh) >= 2)
523685 }
524- let cE = if (if (if (sigVerify(cy.bodyBytes, cy.proofs[0], ar))
686+ let di = if (if (if (sigVerify(dc.bodyBytes, dc.proofs[0], aq))
525687 then true
526- else sigVerify(cy.bodyBytes, cy.proofs[0], as))
688+ else sigVerify(dc.bodyBytes, dc.proofs[0], ar))
527689 then true
528- else sigVerify(cy.bodyBytes, cy.proofs[0], at))
690+ else sigVerify(dc.bodyBytes, dc.proofs[0], as))
529691 then true
530- else sigVerify(cy.bodyBytes, cy.proofs[0], ai)
531- let ao = cy
532- if ($isInstanceOf(ao, "DataTransaction"))
692+ else sigVerify(dc.bodyBytes, dc.proofs[0], ah)
693+ let an = dc
694+ if ($isInstanceOf(an, "DataTransaction"))
533695 then {
534- let cF = ao
535- if (valueOrElse(getBoolean(ad, e), false))
536- then cE
696+ let dj = an
697+ if (valueOrElse(getBoolean(ac, e), false))
698+ then di
537699 else false
538700 }
539- else cA
701+ else de
540702 }
541703
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
3434 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_high_competition"
4949
5050 let x = "_SWOP_amount"
5151
5252 let y = "_ref_id"
5353
5454 let z = "_verify_hash"
5555
5656 let A = "_duration"
5757
5858 let B = "_total_purchased_buy_asset_in_marketing"
5959
6060 let C = "_total_purchased_buy_asset_in_marketing_finalized"
6161
6262 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
7474 let J = "_buy_token"
7575
7676 let K = "_claim_params"
7777
7878 let L = "_high_competition_comission"
7979
8080 let M = "_high_competition_sale"
8181
8282 let N = "_high_competition_ticket_last_number"
8383
8484 let O = "_tickets_high_competition"
8585
8686 let P = "_total_buy_asset_sold_high_competition"
8787
8888 let Q = "_claimed_tokens"
8989
9090 let R = "_claimed_buy_tokens"
9191
9292 let S = "_bought_tickets"
9393
9494 let T = "_tickets_number"
9595
9696 let U = "_tickets_number_high_competition"
9797
9898 let V = "_bought_tickets_high_competition"
9999
100100 let W = "_available_purchase_marketing"
101101
102102 let X = "_purchased_buy_asset_in_marketing"
103103
104104 let Y = "_bought_allocations"
105105
106106 let Z = "_claim_status"
107107
108108 let aa = "_tickets_result"
109109
110-let ab = "_tickets_result_high_competition"
110+let ab = "_freeze_token_amount"
111111
112-let ac = "_freeze_token_amount"
112+let ac = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
113113
114-let ad = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
114+let ad = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
115115
116-let ae = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
116+let ae = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
117117
118-let af = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
118+let af = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
119119
120-let ag = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
120+let ag = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
121121
122-let ah = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
122+let ah = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
123123
124-let ai = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
124+let ai = 2
125125
126-let aj = 2
126+let aj = valueOrElse(getBoolean(this, a), true)
127127
128-let ak = valueOrElse(getBoolean(this, a), true)
128+let ak = valueOrElse(getIntegerValue(this, g), -1)
129129
130-let al = valueOrElse(getIntegerValue(this, g), -1)
131-
132-func am (an) = {
133- let ao = getString(ad, an)
134- if ($isInstanceOf(ao, "String"))
130+func al (am) = {
131+ let an = getString(ac, am)
132+ if ($isInstanceOf(an, "String"))
135133 then {
136- let ap = ao
137- fromBase58String(ap)
134+ let ao = an
135+ fromBase58String(ao)
138136 }
139137 else {
140- let aq = ao
138+ let ap = an
141139 throw("Admin public key is empty")
142140 }
143141 }
144142
145143
146-let ar = am(b)
144+let aq = al(b)
147145
148-let as = am(c)
146+let ar = al(c)
149147
150-let at = am(d)
148+let as = al(d)
151149
152-func au (av) = {
153- let ao = av
154- if ($isInstanceOf(ao, "ByteVector"))
150+func at (au) = {
151+ let an = au
152+ if ($isInstanceOf(an, "ByteVector"))
155153 then {
156- let aw = ao
157- let ax = toBase58String(aw)
158- let ay = valueOrErrorMessage(assetInfo(aw), (("Asset " + ax) + " doesn't exist"))
159- $Tuple3(ax, ay.name, ay.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)
160158 }
161- else if ($isInstanceOf(ao, "Unit"))
159+ else if ($isInstanceOf(an, "Unit"))
162160 then {
163- let az = ao
161+ let ay = an
164162 $Tuple3("WAVES", "WAVES", 8)
165163 }
166164 else throw("Match error")
167165 }
168166
169167
170-func aA () = valueOrElse(getInteger(this, f), 1)
168+func az () = valueOrElse(getInteger(this, f), 1)
171169
172170
173-func aB () = valueOrElse(getInteger(ag, ((("rpd_balance_" + toBase58String(ah)) + "_") + toString(this))), 0)
174-
175-
176-func aC (aD) = if ((aD == "WAVES"))
171+func aA (aB) = if ((aB == "WAVES"))
177172 then $Tuple4(unit, "WAVES", "WAVES", 8)
178173 else {
179- let ax = aD
180- let aw = fromBase58String(aD)
181- let ay = valueOrErrorMessage(assetInfo(aw), (("Asset " + ax) + " doesn't exist"))
182- $Tuple4(aw, ax, ay.name, ay.decimals)
174+ let aw = aB
175+ let av = fromBase58String(aB)
176+ let ax = valueOrErrorMessage(assetInfo(av), (("Asset " + aw) + " doesn't exist"))
177+ $Tuple4(av, aw, ax.name, ax.decimals)
183178 }
184179
185180
186-@Callable(aE)
187-func hashingRandom (aF,aG) = if (!(ak))
181+@Callable(aC)
182+func hashingRandom (aD,aE) = if (!(aj))
188183 then throw("DApp is inactive at this moment")
189- else if (!(containsElement([ar, as, at], aE.callerPublicKey)))
184+ else if (!(containsElement([aq, ar, as], aC.callerPublicKey)))
190185 then throw("Only admin can call this function")
191- else [StringEntry((toString(aF) + z), aG)]
186+ else [StringEntry((toString(aD) + z), aE)]
192187
193188
194189
195-@Callable(aE)
196-func initCaller (aH) = if (!(ak))
190+@Callable(aC)
191+func initCaller (aF) = if (!(aj))
197192 then throw("DApp is inactive at this moment")
198- else if (!(containsElement([ar, as, at], aE.callerPublicKey)))
193+ else if (!(containsElement([aq, ar, as], aC.callerPublicKey)))
199194 then throw("Only admin can call this function")
200- else [StringEntry(h, aH)]
195+ else [StringEntry(h, aF)]
201196
202197
203198
204-@Callable(aE)
205-func init (aI,aJ,aK,aL,aM,aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW,aX,aY,aZ) = if (!(ak))
199+@Callable(aC)
200+func init (aG,aH,aI,aJ,aK,aL,aM,aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW,aX) = if (!(aj))
206201 then throw("DApp is inactive at this moment")
207- else if ((toString(aE.caller) != valueOrElse(getString(this, h), "")))
202+ else if ((toString(aC.caller) != valueOrElse(getString(this, h), "")))
208203 then throw("Only project admin can call init function")
209- else if ((size(aE.payments) != 1))
204+ else if ((size(aC.payments) != 1))
210205 then throw("One attached payment expected")
211- else if ((height > aJ))
206+ else if ((height > aH))
212207 then throw("Start height must be greater than blockchain height")
213- else if (if (aY)
214- then (size(aZ) != 3)
208+ else if (if (aW)
209+ then (size(aX) != 3)
215210 else false)
216211 then throw("Freeze params list must have 3 items")
217212 else {
218- let aF = aA()
219- let ba = toString(aF)
220- let bb = $Tuple2(aE.payments[0].amount, aE.payments[0].assetId)
221- let bc = bb._1
222- let bd = bb._2
223- let be = au(bd)
224- let bf = be._1
225- let bg = be._2
226- let bh = be._3
227- let bi = if (aY)
228- then [BooleanEntry((ba + F), true), StringEntry((ba + G), aZ[0]), IntegerEntry((ba + H), parseIntValue(aZ[1])), IntegerEntry((ba + I), parseIntValue(aZ[2]))]
213+ let aD = az()
214+ let aY = toString(aD)
215+ let aZ = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
216+ let ba = aZ._1
217+ let bb = aZ._2
218+ let bc = at(bb)
219+ let bd = bc._1
220+ let be = bc._2
221+ let bf = bc._3
222+ let bg = if (aW)
223+ then [BooleanEntry((aY + F), true), StringEntry((aY + G), aX[0]), IntegerEntry((aY + H), parseIntValue(aX[1])), IntegerEntry((aY + I), parseIntValue(aX[2]))]
229224 else nil
230- ([IntegerEntry((bf + "_launchpad"), aF), IntegerEntry(f, (aF + 1)), StringEntry((ba + i), aI), IntegerEntry((ba + j), height), IntegerEntry((ba + k), aJ), IntegerEntry((ba + A), aK), StringEntry((ba + J), aL), IntegerEntry((ba + E), aT), IntegerEntry((ba + o), bc), StringEntry((ba + n), bf), IntegerEntry((ba + m), aM), IntegerEntry((ba + w), 0), IntegerEntry((ba + N), 0), IntegerEntry((ba + q), aN), IntegerEntry((ba + r), aO), IntegerEntry((ba + s), aS), IntegerEntry((ba + t), aP), IntegerEntry((ba + u), aQ), IntegerEntry((ba + v), aR), StringEntry((ba + K), makeString(aU, ",")), BooleanEntry((ba + M), aV), IntegerEntry((ba + L), aW), IntegerEntry((ba + O), aX), IntegerEntry(g, aF), StringEntry(h, "")] ++ bi)
225+ ([IntegerEntry((bd + "_launchpad"), aD), IntegerEntry(f, (aD + 1)), StringEntry((aY + i), aG), IntegerEntry((aY + j), height), IntegerEntry((aY + k), aH), IntegerEntry((aY + A), aI), StringEntry((aY + J), aJ), IntegerEntry((aY + E), aR), IntegerEntry((aY + o), ba), StringEntry((aY + n), bd), IntegerEntry((aY + m), aK), IntegerEntry((aY + w), 0), IntegerEntry((aY + N), 0), IntegerEntry((aY + q), aL), IntegerEntry((aY + r), aM), IntegerEntry((aY + s), aQ), IntegerEntry((aY + t), aN), IntegerEntry((aY + u), aO), IntegerEntry((aY + v), aP), StringEntry((aY + K), makeString(aS, ",")), BooleanEntry((aY + M), aT), IntegerEntry((aY + L), aU), IntegerEntry((aY + O), aV), IntegerEntry(g, aD), StringEntry(h, "")] ++ bg)
231226 }
232227
233228
234229
235-@Callable(aE)
236-func commitSwopfiSale (aF,bj) = {
237- let bk = $Tuple2(aE.payments[0].amount, aE.payments[0].assetId)
238- let bc = bk._1
239- let bd = bk._2
240- let bl = aC(value(getString(this, (toString(aF) + J))))
241- let bm = bl._1
242- let bn = bl._2
243- let bo = bl._3
244- let bp = bl._4
245- let bq = valueOrElse(getInteger(ae, (toString(aE.caller) + x)), 0)
246- let br = (bq / getIntegerValue(this, (toString(aF) + s)))
247- let bs = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aF)) + S)), 0)
248- let bt = (br - bs)
249- let aJ = value(getInteger(this, (toString(aF) + k)))
250- let aK = value(getInteger(this, (toString(aF) + A)))
251- let aY = valueOrElse(getBoolean(this, (toString(aF) + F)), false)
252- if (!(ak))
230+@Callable(aC)
231+func commitSwopfiSale (aD,bh) = {
232+ let bi = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
233+ let ba = bi._1
234+ let bb = bi._2
235+ let bj = aA(value(getString(this, (toString(aD) + J))))
236+ let bk = bj._1
237+ let bl = bj._2
238+ let bm = bj._3
239+ let bn = bj._4
240+ let bo = valueOrElse(getInteger(ad, (toString(aC.caller) + x)), 0)
241+ let bp = (bo / getIntegerValue(this, (toString(aD) + s)))
242+ let bq = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + S)), 0)
243+ let br = (bp - bq)
244+ let aH = value(getInteger(this, (toString(aD) + k)))
245+ let aI = value(getInteger(this, (toString(aD) + A)))
246+ let aW = valueOrElse(getBoolean(this, (toString(aD) + F)), false)
247+ if (!(aj))
253248 then throw("DApp is inactive at this moment")
254- else if ((al != aF))
249+ else if ((ak != aD))
255250 then throw("There is no active launchpad or this launchpad is ended")
256- else if ((aJ > height))
251+ else if ((aH > height))
257252 then throw("Launchpad sale not started yet")
258- else if ((height > (aJ + aK)))
253+ else if ((height > (aH + aI)))
259254 then throw("Launchpad sale ended")
260- else if (if (!(aY))
261- then if ((size(aE.payments) != 1))
255+ else if (if (!(aW))
256+ then if ((size(aC.payments) != 1))
262257 then true
263- else (bd != bm)
258+ else (bb != bk)
264259 else false)
265- then throw((("One attached payment in " + bo) + " expected"))
266- else if (if (aY)
267- then if ((size(aE.payments) != 2))
260+ then throw((("One attached payment in " + bm) + " expected"))
261+ else if (if (aW)
262+ then if ((size(aC.payments) != 2))
268263 then true
269- else (bd != bm)
264+ else (bb != bk)
270265 else false)
271266 then {
272- let bu = getStringValue(this, (toString(aF) + G))
273- throw(((("Two attached payments expected: First in " + bo) + ", second in ") + bu))
267+ let bs = getStringValue(this, (toString(aD) + G))
268+ throw(((("Two attached payments expected: First in " + bm) + ", second in ") + bs))
274269 }
275- else if (if ((0 >= br))
270+ else if (if ((0 >= bp))
276271 then true
277- else (0 >= bt))
272+ else (0 >= br))
278273 then throw("Not enought SWOP in staking to buy tickets")
279274 else {
280- let bv = getIntegerValue(this, (toString(aF) + r))
281- let aN = getIntegerValue(this, (toString(aF) + q))
282- let bw = aC(getStringValue(this, (toString(aF) + n)))
283- let bx = bw._1
284- let by = bw._2
285- let bz = bw._3
286- let bA = bw._4
287- let bB = fraction(aN, bv, pow(10, 0, bA, 0, 0, DOWN))
288- let bC = fraction(bB, getIntegerValue(this, (toString(aF) + m)), 100)
289- let bD = (bc / (bB + bC))
290- let bE = min([bD, bt])
291- let bF = (bE * (bB + bC))
292- let bG = (bc - bF)
293- if ((bD == 0))
294- then throw((("Not enought " + bo) + " to buy tickets"))
295- else if ((bG != 0))
296- then throw((((("Wrong payment. To buy " + toString(bE)) + "tickets you need to pay ") + toString(bF)) + bo))
275+ let bt = getIntegerValue(this, (toString(aD) + r))
276+ let aL = getIntegerValue(this, (toString(aD) + q))
277+ let bu = aA(getStringValue(this, (toString(aD) + n)))
278+ let bv = bu._1
279+ let bw = bu._2
280+ let bx = bu._3
281+ let by = bu._4
282+ let bz = fraction(aL, bt, pow(10, 0, by, 0, 0, DOWN))
283+ let bA = fraction(bz, getIntegerValue(this, (toString(aD) + m)), 100)
284+ let bB = (ba / (bz + bA))
285+ let bC = min([bB, br])
286+ let bD = (bC * (bz + bA))
287+ let bE = (ba - bD)
288+ if ((bB == 0))
289+ then throw((("Not enought " + bm) + " to buy tickets"))
290+ else if ((bE != 0))
291+ then throw((((("Wrong payment. To buy " + toString(bC)) + "tickets you need to pay ") + toString(bD)) + bm))
297292 else {
298- let bi = if (aY)
293+ let bg = if (aW)
299294 then {
300- let bu = getStringValue(this, (toString(aF) + G))
301- let bH = getIntegerValue(this, (toString(aF) + I))
302- let bI = $Tuple2(aE.payments[1].amount, aE.payments[1].assetId)
303- let bJ = bI._1
304- let bK = bI._2
305- let bL = au(bd)
306- let bM = bL._1
307- let bN = bL._2
308- let bO = bL._3
309- let bP = (bH * bD)
310- if (if ((bM != bu))
295+ let bs = getStringValue(this, (toString(aD) + G))
296+ let bF = getIntegerValue(this, (toString(aD) + I))
297+ let bG = $Tuple2(aC.payments[1].amount, aC.payments[1].assetId)
298+ let bH = bG._1
299+ let bI = bG._2
300+ let bJ = at(bb)
301+ let bK = bJ._1
302+ let bL = bJ._2
303+ let bM = bJ._3
304+ let bN = (bF * bB)
305+ if (if ((bK != bs))
311306 then true
312- else (bP != bJ))
313- then throw((((("You need to add " + toString(bP)) + " ") + bN) + " as a second payment"))
314- else [IntegerEntry((((toString(aE.caller) + "_") + toString(aF)) + ac), bJ)]
307+ else (bN != bH))
308+ then throw((((("You need to add " + toString(bN)) + " ") + bL) + " as a second payment"))
309+ else [IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + ab), bH)]
315310 }
316311 else nil
317- let bQ = valueOrElse(getString(this, (((toString(aE.caller) + "_") + toString(aF)) + T)), "")
318- let bR = getIntegerValue(this, (toString(aF) + w))
319- let bS = ((toString((bR + 1)) + "-") + toString((bR + bE)))
320- let bT = (bQ + (if ((bQ != ""))
321- then ("," + bS)
322- else ("" + bS)))
323- let bU = if ((bm == ah))
324- then invoke(ag, "lockNeutrino", nil, [AttachedPayment(bd, bc)])
312+ let bO = valueOrElse(getString(this, (((toString(aC.caller) + "_") + toString(aD)) + T)), "")
313+ let bP = getIntegerValue(this, (toString(aD) + w))
314+ let bQ = ((toString((bP + 1)) + "-") + toString((bP + bC)))
315+ let bR = (bO + (if ((bO != ""))
316+ then ("," + bQ)
317+ else ("" + bQ)))
318+ let bS = if ((bk == ag))
319+ then invoke(af, "lockNeutrino", nil, [AttachedPayment(bb, ba)])
325320 else 0
326- if ((bU == bU))
321+ if ((bS == bS))
327322 then {
328- let bV = ([IntegerEntry((((toString(aE.caller) + "_") + toString(aF)) + S), (bs + bE)), IntegerEntry((toString(aF) + w), (bR + bE)), StringEntry((((toString(aE.caller) + "_") + toString(aF)) + T), bT)] ++ bi)
329- if (!(isDefined(getString(this, (((toString(aE.caller) + "_") + toString(aF)) + y)))))
330- then (bV ++ [StringEntry((((toString(aE.caller) + "_") + toString(aF)) + y), bj)])
331- else bV
323+ let bT = ([IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + S), (bq + bC)), IntegerEntry((toString(aD) + w), (bP + bC)), StringEntry((((toString(aC.caller) + "_") + toString(aD)) + T), bR)] ++ bg)
324+ if (!(isDefined(getString(this, (((toString(aC.caller) + "_") + toString(aD)) + y)))))
325+ then (bT ++ [StringEntry((((toString(aC.caller) + "_") + toString(aD)) + y), bh)])
326+ else bT
332327 }
333328 else throw("Strict value is not equal to itself.")
334329 }
335330 }
336331 }
337332
338333
339334
340-@Callable(aE)
341-func commitAccessListSale (aF,bj) = {
342- let bW = $Tuple2(aE.payments[0].amount, aE.payments[0].assetId)
343- let bc = bW._1
344- let bd = bW._2
345- let bX = aC(value(getString(this, (toString(aF) + J))))
346- let bm = bX._1
347- let bn = bX._2
348- let bo = bX._3
349- let bp = bX._4
350- let bY = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aF)) + X)), 0)
351- let bZ = valueOrElse(getInteger(this, (toString(aF) + B)), 0)
352- let ca = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aF)) + Y)), 0)
353- let aM = getIntegerValue(this, (toString(aF) + m))
354- let bv = getIntegerValue(this, (toString(aF) + r))
355- let aR = getIntegerValue(this, (toString(aF) + v))
356- let cb = aC(getStringValue(this, (toString(aF) + n)))
357- let bx = cb._1
358- let by = cb._2
359- let bz = cb._3
360- let bA = cb._4
361- let cc = fraction(fraction(bv, aR, pow(10, 0, bA, 0, 0, DOWN)), (100 + aM), 100)
362- let aJ = value(getInteger(this, (toString(aF) + k)))
363- let aK = value(getInteger(this, (toString(aF) + A)))
364- if (!(ak))
335+@Callable(aC)
336+func commitAccessListSale (aD,bh) = {
337+ let bU = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
338+ let ba = bU._1
339+ let bb = bU._2
340+ let bV = aA(value(getString(this, (toString(aD) + J))))
341+ let bk = bV._1
342+ let bl = bV._2
343+ let bm = bV._3
344+ let bn = bV._4
345+ let bW = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + X)), 0)
346+ let bX = valueOrElse(getInteger(this, (toString(aD) + B)), 0)
347+ let bY = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + Y)), 0)
348+ let aK = getIntegerValue(this, (toString(aD) + m))
349+ let bt = getIntegerValue(this, (toString(aD) + r))
350+ let aP = getIntegerValue(this, (toString(aD) + v))
351+ let bZ = aA(getStringValue(this, (toString(aD) + n)))
352+ let bv = bZ._1
353+ let bw = bZ._2
354+ let bx = bZ._3
355+ let by = bZ._4
356+ let ca = fraction(fraction(bt, aP, pow(10, 0, by, 0, 0, DOWN)), (100 + aK), 100)
357+ let aH = value(getInteger(this, (toString(aD) + k)))
358+ let aI = value(getInteger(this, (toString(aD) + A)))
359+ if (!(aj))
365360 then throw("DApp is inactive at this moment")
366- else if ((al != aF))
361+ else if ((ak != aD))
367362 then throw("There is no active launchpad or this launchpad is ended")
368- else if ((aJ > height))
363+ else if ((aH > height))
369364 then throw("Launchpad sale not started yet")
370- else if ((height > (aJ + aK)))
365+ else if ((height > (aH + aI)))
371366 then throw("Launchpad sale ended")
372- else if (if ((size(aE.payments) != 1))
367+ else if (if ((size(aC.payments) != 1))
373368 then true
374- else (bd != bm))
375- then throw((("One attached payment in " + bo) + " expected"))
376- else if ((ca >= aj))
377- then throw((("You can buy only " + toString(aj)) + "allocations"))
378- else if (if ((cc != bc))
379- then ((cc * 2) != bc)
369+ else (bb != bk))
370+ then throw((("One attached payment in " + bm) + " expected"))
371+ else if ((bY >= ai))
372+ then throw((("You can buy only " + toString(ai)) + "allocations"))
373+ else if (if ((ca != ba))
374+ then ((ca * 2) != ba)
380375 else false)
381- then throw(((("Wrong payment. You can buy 1 or 2 allocations for " + toString(cc)) + bo) + " per allocation"))
376+ then throw(((("Wrong payment. You can buy 1 or 2 allocations for " + toString(ca)) + bm) + " per allocation"))
382377 else {
383- let cd = (bc / cc)
384- let bU = if ((bm == ah))
385- then invoke(ag, "lockNeutrino", nil, [AttachedPayment(bd, bc)])
378+ let cb = (ba / ca)
379+ let bS = if ((bk == ag))
380+ then invoke(af, "lockNeutrino", nil, [AttachedPayment(bb, ba)])
386381 else 0
387- if ((bU == bU))
382+ if ((bS == bS))
388383 then {
389- let bV = [IntegerEntry((((toString(aE.caller) + "_") + toString(aF)) + Y), (ca + cd)), IntegerEntry((((toString(aE.caller) + "_") + toString(aF)) + X), (bY + bc)), IntegerEntry((toString(aF) + B), (bZ + bc))]
390- if (!(isDefined(getString(this, (((toString(aE.caller) + "_") + toString(aF)) + y)))))
391- then (bV ++ [StringEntry((((toString(aE.caller) + "_") + toString(aF)) + y), bj)])
392- else bV
384+ let bT = [IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + Y), (bY + cb)), IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + X), (bW + ba)), IntegerEntry((toString(aD) + B), (bX + ba))]
385+ if (!(isDefined(getString(this, (((toString(aC.caller) + "_") + toString(aD)) + y)))))
386+ then (bT ++ [StringEntry((((toString(aC.caller) + "_") + toString(aD)) + y), bh)])
387+ else bT
393388 }
394389 else throw("Strict value is not equal to itself.")
395390 }
396391 }
397392
398393
399394
400-@Callable(aE)
401-func commitHighCompetitionSale (aF,bj) = {
402- let ce = $Tuple2(aE.payments[0].amount, aE.payments[0].assetId)
403- let bc = ce._1
404- let bd = ce._2
405- let cf = aC(value(getString(this, (toString(aF) + J))))
406- let bm = cf._1
407- let bn = cf._2
408- let bo = cf._3
409- let bp = cf._4
410- let aJ = value(getInteger(this, (toString(aF) + k)))
411- let aK = value(getInteger(this, (toString(aF) + A)))
412- let cg = valueOrElse(getInteger(this, (((toString(aE.caller) + "_") + toString(aF)) + V)), 0)
413- let ch = valueOrElse(getBoolean(this, (toString(aF) + M)), false)
414- if (!(ak))
395+@Callable(aC)
396+func commitHighCompetitionSale (aD,bh) = {
397+ let cc = $Tuple2(aC.payments[0].amount, aC.payments[0].assetId)
398+ let ba = cc._1
399+ let bb = cc._2
400+ let cd = aA(value(getString(this, (toString(aD) + J))))
401+ let bk = cd._1
402+ let bl = cd._2
403+ let bm = cd._3
404+ let bn = cd._4
405+ let aH = value(getInteger(this, (toString(aD) + k)))
406+ let aI = value(getInteger(this, (toString(aD) + A)))
407+ let ce = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + V)), 0)
408+ let cf = valueOrElse(getBoolean(this, (toString(aD) + M)), false)
409+ if (!(aj))
415410 then throw("DApp is inactive at this moment")
416- else if ((al != aF))
411+ else if ((ak != aD))
417412 then throw("There is no active launchpad or this launchpad is ended")
418- else if (!(ch))
413+ else if (!(cf))
419414 then throw("There is no high competition sale for this launchpad")
420- else if ((aJ > height))
415+ else if ((aH > height))
421416 then throw("Launchpad sale not started yet")
422- else if ((height > (aJ + aK)))
417+ else if ((height > (aH + aI)))
423418 then throw("Launchpad sale ended")
424- else if (if ((size(aE.payments) != 1))
419+ else if (if ((size(aC.payments) != 1))
425420 then true
426- else (bd != bm))
427- then throw((("One attached payment in " + bo) + " expected"))
421+ else (bb != bk))
422+ then throw((("One attached payment in " + bm) + " expected"))
428423 else {
429- let bv = getIntegerValue(this, (toString(aF) + r))
430- let aN = getIntegerValue(this, (toString(aF) + q))
431- let ci = aC(getStringValue(this, (toString(aF) + n)))
432- let bx = ci._1
433- let by = ci._2
434- let bz = ci._3
435- let bA = ci._4
436- let bB = fraction(aN, bv, pow(10, 0, bA, 0, 0, DOWN))
437- let bC = fraction(bB, getIntegerValue(this, (toString(aF) + L)), 100)
438- let bD = (bc / (bB + bC))
439- let cj = (bD * (bB + bC))
440- let bG = (bc - cj)
441- if ((bD == 0))
442- then throw((("Not enought " + bo) + " to buy tickets"))
443- else if ((bG != 0))
444- then throw((((("Wrong payment. To buy " + toString(bD)) + "tickets you need to pay ") + toString(cj)) + bo))
424+ let bt = getIntegerValue(this, (toString(aD) + r))
425+ let aL = getIntegerValue(this, (toString(aD) + q))
426+ let cg = aA(getStringValue(this, (toString(aD) + n)))
427+ let bv = cg._1
428+ let bw = cg._2
429+ let bx = cg._3
430+ let by = cg._4
431+ let bz = fraction(aL, bt, pow(10, 0, by, 0, 0, DOWN))
432+ let bA = fraction(bz, getIntegerValue(this, (toString(aD) + L)), 100)
433+ let bB = (ba / (bz + bA))
434+ let ch = (bB * (bz + bA))
435+ let bE = (ba - ch)
436+ if ((bB == 0))
437+ then throw((("Not enought " + bm) + " to buy tickets"))
438+ else if ((bE != 0))
439+ then throw((((("Wrong payment. To buy " + toString(bB)) + "tickets you need to pay ") + toString(ch)) + bm))
445440 else {
446- let bQ = valueOrElse(getString(this, (((toString(aE.caller) + "_") + toString(aF)) + U)), "")
447- let bR = getIntegerValue(this, (toString(aF) + N))
448- let bS = ((toString((bR + 1)) + "-") + toString((bR + bD)))
449- let bT = (bQ + (if ((bQ != ""))
450- then ("," + bS)
451- else ("" + bS)))
452- let bU = if ((bm == ah))
453- then invoke(ag, "lockNeutrino", nil, [AttachedPayment(bd, bc)])
441+ let bO = valueOrElse(getString(this, (((toString(aC.caller) + "_") + toString(aD)) + U)), "")
442+ let bP = getIntegerValue(this, (toString(aD) + N))
443+ let bQ = ((toString((bP + 1)) + "-") + toString((bP + bB)))
444+ let bR = (bO + (if ((bO != ""))
445+ then ("," + bQ)
446+ else ("" + bQ)))
447+ let bS = if ((bk == ag))
448+ then invoke(af, "lockNeutrino", nil, [AttachedPayment(bb, ba)])
454449 else 0
455- if ((bU == bU))
450+ if ((bS == bS))
456451 then {
457- let bV = [IntegerEntry((((toString(aE.caller) + "_") + toString(aF)) + V), (cg + bD)), IntegerEntry((toString(aF) + N), (bR + bD)), StringEntry((((toString(aE.caller) + "_") + toString(aF)) + U), bT)]
458- if (!(isDefined(getString(this, (((toString(aE.caller) + "_") + toString(aF)) + y)))))
459- then (bV ++ [StringEntry((((toString(aE.caller) + "_") + toString(aF)) + y), bj)])
460- else bV
452+ let bT = [IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + V), (ce + bB)), IntegerEntry((toString(aD) + N), (bP + bB)), StringEntry((((toString(aC.caller) + "_") + toString(aD)) + U), bR)]
453+ if (!(isDefined(getString(this, (((toString(aC.caller) + "_") + toString(aD)) + y)))))
454+ then (bT ++ [StringEntry((((toString(aC.caller) + "_") + toString(aD)) + y), bh)])
455+ else bT
461456 }
462457 else throw("Strict value is not equal to itself.")
463458 }
464459 }
465460 }
466461
467462
468463
469-@Callable(aE)
470-func finalise (aF,ck,cl) = {
471- let cm = getStringValue(this, (toString(aF) + z))
472- let cn = toBase58String(sha256((toBytes(ck) + toBytes(cl))))
473- if (!(ak))
464+@Callable(aC)
465+func finalise (aD,ci,cj) = {
466+ let ck = getStringValue(this, (toString(aD) + z))
467+ let cl = toBase58String(sha256((toBytes(ci) + toBytes(cj))))
468+ if (!(aj))
474469 then throw("DApp is inactive at this moment")
475- else if (!(containsElement([ar, as, at], aE.callerPublicKey)))
470+ else if (!(containsElement([aq, ar, as], aC.callerPublicKey)))
476471 then throw("Only admin can call this function")
477- else if ((cn != cm))
472+ else if ((cl != ck))
478473 then throw("vrf Height hash not matching")
479474 else {
480- let co = aC(value(getString(this, (toString(aF) + J))))
481- let bm = co._1
482- let bn = co._2
483- let bo = co._3
484- let bp = co._4
485- let aI = addressFromStringValue(getStringValue(this, (toString(aF) + i)))
486- let aM = getIntegerValue(this, (toString(aF) + m))
487- let cp = getIntegerValue(this, (toString(aF) + L))
488- let cq = valueOrElse(getInteger(this, (toString(aF) + D)), 0)
489- let cr = getIntegerValue(this, (toString(aF) + p))
490- let cs = valueOrElse(getIntegerValue(this, (toString(aF) + P)), 0)
491- let ct = fraction(cr, aM, 100)
492- let cu = fraction(cs, cp, 100)
493- let cv = getIntegerValue(this, (toString(aF) + C))
494- let cw = fraction(cv, aM, 100)
495- let cx = (((((cr + cv) + ct) + cw) + cs) + cu)
496- if ((cq > (cr + cv)))
475+ let cm = aA(value(getString(this, (toString(aD) + J))))
476+ let bk = cm._1
477+ let bl = cm._2
478+ let bm = cm._3
479+ let bn = cm._4
480+ let aG = addressFromStringValue(getStringValue(this, (toString(aD) + i)))
481+ let aK = getIntegerValue(this, (toString(aD) + m))
482+ let cn = getIntegerValue(this, (toString(aD) + L))
483+ let co = valueOrElse(getInteger(this, (toString(aD) + D)), 0)
484+ let cp = getIntegerValue(this, (toString(aD) + p))
485+ let cq = valueOrElse(getIntegerValue(this, (toString(aD) + P)), 0)
486+ let cr = fraction(cp, aK, 100)
487+ let cs = fraction(cq, cn, 100)
488+ let ct = getIntegerValue(this, (toString(aD) + C))
489+ let cu = fraction(ct, aK, 100)
490+ let cv = (((((cp + ct) + cr) + cu) + cq) + cs)
491+ if ((co > (cp + ct)))
497492 then throw("Can't transfer negative value to project")
498493 else {
499- let bU = if ((bm == ah))
500- then invoke(ag, "unlockNeutrino", [cx, toBase58String(ah)], nil)
494+ let bS = if ((bk == ag))
495+ then invoke(af, "unlockNeutrino", [cv, toBase58String(ag)], nil)
501496 else 0
502- if ((bU == bU))
503- then [IntegerEntry((toString(aF) + l), height), ScriptTransfer(aI, ((cr + cv) - cq), bm), ScriptTransfer(af, ((ct + cw) + cu), bm)]
497+ if ((bS == bS))
498+ then [IntegerEntry((toString(aD) + l), height), ScriptTransfer(aG, ((cp + ct) - co), bk), ScriptTransfer(ae, ((cr + cu) + cs), bk)]
504499 else throw("Strict value is not equal to itself.")
505500 }
506501 }
507502 }
508503
509504
510-@Verifier(cy)
511-func cz () = {
512- let cA = {
513- let cB = if (sigVerify(cy.bodyBytes, cy.proofs[0], ar))
505+
506+@Callable(aC)
507+func claim (aD) = {
508+ let cw = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + S)), 0)
509+ let cx = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + V)), 0)
510+ let bY = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + Y)), 0)
511+ let cy = valueOrElse(getBoolean(this, (((toString(aC.caller) + "_") + toString(aD)) + Z)), false)
512+ let cz = valueOrElse(getInteger(this, (toString(aD) + l)), 0)
513+ if (!(aj))
514+ then throw("DApp is inactive at this moment")
515+ else if ((cz == 0))
516+ then throw("You can't claim because results are not finalized")
517+ else if (cy)
518+ then throw("You are already claimed")
519+ else if (if (if ((cw == 0))
520+ then (bY == 0)
521+ else false)
522+ then (cx == 0)
523+ else false)
524+ then throw("You can't claim because you don't buy anything")
525+ else {
526+ let cA = aA(value(getString(this, (toString(aD) + J))))
527+ let bk = cA._1
528+ let bl = cA._2
529+ let bm = cA._3
530+ let bn = cA._4
531+ let cB = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + aa)), 0)
532+ let cC = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + aa)), 0)
533+ let cD = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + W)), 0)
534+ let aK = getIntegerValue(this, (toString(aD) + m))
535+ let cE = min([bY, cD])
536+ let bt = getIntegerValue(this, (toString(aD) + r))
537+ let aL = getIntegerValue(this, (toString(aD) + q))
538+ let cF = aA(getStringValue(this, (toString(aD) + n)))
539+ let bv = cF._1
540+ let bw = cF._2
541+ let bx = cF._3
542+ let by = cF._4
543+ let bz = fraction(aL, bt, pow(10, 0, by, 0, 0, DOWN))
544+ let aP = getIntegerValue(this, (toString(aD) + v))
545+ let cG = (((cB * aL) + (cE * aP)) + (cC * aL))
546+ let cH = ((bY - cE) * aP)
547+ let cI = fraction(fraction(cH, bt, pow(10, 0, by, 0, 0, DOWN)), (100 + aK), 100)
548+ let cJ = fraction(((cw - cB) * bz), (100 + aK), 100)
549+ let cK = fraction(((cx - cC) * bz), (100 + aK), 100)
550+ let cL = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + R)), 0)
551+ if (if (if ((0 > cI))
552+ then true
553+ else (0 > cJ))
554+ then true
555+ else (0 > cK))
556+ then throw("Error with allowed allocation param or wonned tickets param please contact support")
557+ else {
558+ let cM = ((cJ + cK) - cL)
559+ let cN = if ((cM > 0))
560+ then [ScriptTransfer(aC.caller, cM, bk), IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + R), cM)]
561+ else nil
562+ let bS = if (if ((cM > 0))
563+ then (bk == ag)
564+ else false)
565+ then invoke(af, "unlockNeutrino", [cM, toBase58String(ag)], nil)
566+ else 0
567+ if ((bS == bS))
568+ then {
569+ let cO = split(valueOrElse(getString(this, K), ""), ",")
570+ if (if ((size(cO) == 0))
571+ then true
572+ else (cO[0] == "claimAll"))
573+ then {
574+ let cP = if ((cG > 0))
575+ then [ScriptTransfer(aC.caller, cG, bv)]
576+ else nil
577+ (([BooleanEntry((((toString(aC.caller) + "_") + toString(aD)) + Z), true), IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + Q), cG)] ++ cP) ++ cN)
578+ }
579+ else if ((cO[0] == "claimPeriod"))
580+ then {
581+ let cQ = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + Q)), 0)
582+ let cR = value(parseInt(cO[0]))
583+ let cS = value(parseInt(cO[0]))
584+ let cT = (value(parseInt(cO[0])) + cz)
585+ let cU = ((cS + cz) + cT)
586+ let cV = (fraction(cG, value(parseInt(cO[0])), 100) + (if ((height > cT))
587+ then fraction(cG, (height - cT), cS)
588+ else (0 - cQ)))
589+ let cW = if ((cG >= (cQ + cV)))
590+ then [BooleanEntry((((toString(aC.caller) + "_") + toString(aD)) + Z), true)]
591+ else nil
592+ if (if ((cV > 0))
593+ then true
594+ else (cM > 0))
595+ then {
596+ let cP = if ((cV > 0))
597+ then [IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + Q), (cQ + cV)), ScriptTransfer(aC.caller, cV, bv)]
598+ else nil
599+ (cN ++ cP)
600+ }
601+ else throw("Nothing to claim")
602+ }
603+ else throw("Error whith claim params: unknown function")
604+ }
605+ else throw("Strict value is not equal to itself.")
606+ }
607+ }
608+ }
609+
610+
611+
612+@Callable(aC)
613+func claimFreezeToken (aD) = {
614+ let aW = valueOrElse(getBoolean(this, (toString(aD) + F)), false)
615+ if (!(aj))
616+ then throw("DApp is inactive at this moment")
617+ else if (!(isDefined(getInteger(this, (toString(aD) + l)))))
618+ then throw("You can't claim because results are not finalized")
619+ else if (!(aW))
620+ then throw("There are no additional token freezing for this launchpad")
621+ else {
622+ let bv = fromBase58String(getStringValue(this, (toString(aD) + G)))
623+ let cX = valueOrElse(getInteger(this, (((toString(aC.caller) + "_") + toString(aD)) + ab)), 0)
624+ let aH = valueOrElse(getInteger(this, (toString(aD) + k)), 0)
625+ let aI = valueOrElse(getInteger(this, (toString(aD) + A)), 0)
626+ let cY = getIntegerValue(this, (toString(aD) + H))
627+ let cZ = ((aH + aI) + cY)
628+ if ((cX == 0))
629+ then throw("You are already claimed your tokens or not paid anything")
630+ else if ((cZ > height))
631+ then throw(("Your tokens freezed teel " + toString(cZ)))
632+ else [ScriptTransfer(aC.caller, cX, bv), IntegerEntry((((toString(aC.caller) + "_") + toString(aD)) + ab), 0)]
633+ }
634+ }
635+
636+
637+
638+@Callable(aC)
639+func transferBuyAsset (aD,da) = if (!(aj))
640+ then throw("DApp is inactive")
641+ else if (!(containsElement([aq, ar, as], aC.callerPublicKey)))
642+ then throw("Only admin can call this function")
643+ else {
644+ let aG = addressFromStringValue(getStringValue(this, (toString(aD) + i)))
645+ let db = aA(value(getString(this, (toString(aD) + J))))
646+ let bk = db._1
647+ let bl = db._2
648+ let bm = db._3
649+ let bn = db._4
650+[IntegerEntry((toString(aD) + D), da), ScriptTransfer(aG, da, bk)]
651+ }
652+
653+
654+
655+@Callable(aC)
656+func shutdown () = if (!(aj))
657+ then throw("DApp already inactive")
658+ else if (!(containsElement([aq, ar, as], aC.callerPublicKey)))
659+ then throw("Only admin can call this function")
660+ else [BooleanEntry(a, false)]
661+
662+
663+
664+@Callable(aC)
665+func activate () = if (aj)
666+ then throw("DApp already active")
667+ else if (!(containsElement([aq, ar, as], aC.callerPublicKey)))
668+ then throw("Only admin can call this function")
669+ else [BooleanEntry(a, true)]
670+
671+
672+@Verifier(dc)
673+func dd () = {
674+ let de = {
675+ let df = if (sigVerify(dc.bodyBytes, dc.proofs[0], aq))
514676 then 1
515677 else 0
516- let cC = if (sigVerify(cy.bodyBytes, cy.proofs[1], as))
678+ let dg = if (sigVerify(dc.bodyBytes, dc.proofs[1], ar))
517679 then 1
518680 else 0
519- let cD = if (sigVerify(cy.bodyBytes, cy.proofs[2], at))
681+ let dh = if (sigVerify(dc.bodyBytes, dc.proofs[2], as))
520682 then 1
521683 else 0
522- (((cB + cC) + cD) >= 2)
684+ (((df + dg) + dh) >= 2)
523685 }
524- let cE = if (if (if (sigVerify(cy.bodyBytes, cy.proofs[0], ar))
686+ let di = if (if (if (sigVerify(dc.bodyBytes, dc.proofs[0], aq))
525687 then true
526- else sigVerify(cy.bodyBytes, cy.proofs[0], as))
688+ else sigVerify(dc.bodyBytes, dc.proofs[0], ar))
527689 then true
528- else sigVerify(cy.bodyBytes, cy.proofs[0], at))
690+ else sigVerify(dc.bodyBytes, dc.proofs[0], as))
529691 then true
530- else sigVerify(cy.bodyBytes, cy.proofs[0], ai)
531- let ao = cy
532- if ($isInstanceOf(ao, "DataTransaction"))
692+ else sigVerify(dc.bodyBytes, dc.proofs[0], ah)
693+ let an = dc
694+ if ($isInstanceOf(an, "DataTransaction"))
533695 then {
534- let cF = ao
535- if (valueOrElse(getBoolean(ad, e), false))
536- then cE
696+ let dj = an
697+ if (valueOrElse(getBoolean(ac, e), false))
698+ then di
537699 else false
538700 }
539- else cA
701+ else de
540702 }
541703

github/deemru/w8io/873ac7e 
290.12 ms