tx · 5viUKyPzTSCPq7zgaEdT6xApWdBxhpBEhdXSYRz8UtkV

3P6YGPihPiF81VELikoV1myU55iwTvmcQaQ:  -0.01400000 Waves

2022.03.03 18:05 [3013053] smart account 3P6YGPihPiF81VELikoV1myU55iwTvmcQaQ > SELF 0.00000000 Waves

{ "type": 13, "id": "5viUKyPzTSCPq7zgaEdT6xApWdBxhpBEhdXSYRz8UtkV", "fee": 1400000, "feeAssetId": null, "timestamp": 1646319913712, "version": 2, "chainId": 87, "sender": "3P6YGPihPiF81VELikoV1myU55iwTvmcQaQ", "senderPublicKey": "BWnMC6WjWvjJRc2jc1XibbL3RSvL2mFekrvRxpJGdtp1", "proofs": [ "", "6x1PfKvfhuKBVyPBsmvMnpqZeBm2pQ3hQKzGDd3vxhct2VgZbftbmqpSeXnEkbLzaejYH5ySsY79GuhiFbJW9aQ", "237NgziNquRUtn6ZZ53CFsUdWtWhQzyiGLabu9DK4SVcBXeZAgcq2aMZjcgee7jjX8cEehjUffKEAUUyewH7VaRo" ], "script": "base64:AAIFAAAAAAAAFJwIAhIECgIBCBIDCgEIEhQKEggBAQgBAQEBAQEBARgEAQEEGBIECgIBCBIECgIBCBIECgIBCBIFCgMBAQgSAwoBARIDCgEBEgQKAgEBEgASABoQCgFBEgtrZXlEdXJhdGlvbhohCgFCEhxrZXlBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGioKAUMSJWtleUFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmdGaW5hbGl6ZWQaGAoBRBITa2V5VHJhbnNmZXJCdXlBc3NldBoZCgFFEhRrZXlGcmVlelN3b3BEdXJhdGlvbhodCgFGEhhrZXlGcmVlemVBZGRpdGlvbmFsVG9rZW4aFQoBRxIQa2V5RnJlZXplVG9rZW5JZBobCgFIEhZrZXlGcmVlemVUb2tlbkR1cmF0aW9uGhwKAUkSF2tleUZyZWV6ZVRva2VuUGVyVGlja2V0GhAKAUoSC2tleUJ1eVRva2VuGhMKAUsSDmtleUNsYWltUGFyYW1zGiAKAUwSG2tleUhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbhobCgFNEhZrZXlIaWdoQ29tcGV0aXRpb25TYWxlGhoKAU4SFWtleUhDVGlja2V0TGFzdE51bWJlchodCgFPEhhrZXlIaWdoQ29tcGV0aXRpb25BbW91bnQaIQoBUBIca2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGRIQxoZCgFREhRrZXlVc2VyQ2xhaW1lZFRva2VucxocCgFSEhdrZXlVc2VyQ2xhaW1lZEJ1eVRva2VucxofCgFTEhprZXlVc2VyQm91Z2h0VGlja2V0c0Ftb3VudBoTCgFUEg5rZXlVc2VyVGlja2V0cxoVCgFVEhBrZXlVc2VySENUaWNrZXRzGiEKAVYSHGtleVVzZXJIQ0JvdWdodFRpY2tldHNBbW91bnQaIAoBVxIba2V5VXNlckF2YWlsYWJsZUFsbG9jYXRpb25zGiUKAVgSIGtleVVzZXJBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGh0KAVkSGGtleVVzZXJCb3VnaHRBbGxvY2F0aW9ucxoXCgFaEhJrZXlVc2VyQ2xhaW1TdGF0dXMaDgoBYRIJa2V5QWN0aXZlGgwKAmFBEgZhY3RpdmUaDgoCYUISCGlzQWN0aXZlGhEKAmFDEgtpc0FkbWluQ2FsbBoHCgJhRBIBaRocCgJhRRIWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZxoOCgJhRhIIYXNzZXRTdHIaEQoCYUcSC2xhdW5jaHBhZElkGgoKAmFIEgRoYXNoGg0KAmFJEgdhZGRyZXNzGhQKAmFKEg5wcm9qZWN0QWRkcmVzcxoRCgJhSxILc3RhcnRIZWlnaHQaDgoCYUwSCGR1cmF0aW9uGg4KAmFNEghidXlUb2tlbhoQCgJhThIKY29tbWlzc2lvbhoVCgJhTxIPdG9rZW5zUGVyVGlja2V0GhMKAmFQEg1wcmljZVBlclRva2VuGhkKAmFREhNzd29wZmlUaWNrZXRzQW1vdW50GhoKAmFSEhRjYW1wYWlnblRva2Vuc0Ftb3VudBoZCgJhUxITdG9rZW5zUGVyQWxsb2NhdGlvbhoTCgJhVBINc3dvcFBlclRpY2tldBoYCgJhVRISc3dvcEZyZWV6ZUR1cmF0aW9uGhEKAmFWEgtjbGFpbVBhcmFtcxoZCgJhVxITSGlnaENvbXBldGl0aW9uU2FsZRoeCgJhWBIYaGlnaENvbXBldGl0aW9uQ29taXNzaW9uGiIKAmFZEhxoaWdoQ29tcGV0aXRpb25UaWNrZXRzQW1vdW50GhsKAmFaEhVmcmVlemVBZGRpdGlvbmFsVG9rZW4aIAoCYWESGmtleVVzZXJXaW5uZWRUaWNrZXRzQW1vdW50Gi8KAmFiEilrZXlVc2VyV2lubmVkSGlnaENvbXBldGl0aW9uVGlja2V0c0Ftb3VudBoYCgJhYxISa2V5VXNlckZyZWV6ZVRva2VuGgwKAmFkEgZvcmFjbGUaEAoCYWUSCmdvdmVybmFuY2UaFgoCYWYSEGNvbW1pc3Npb25XYWxsZXQaGAoCYWcSEnN0YWtpbmdVU0ROQWRkcmVzcxoKCgJhaBIEVVNEThoYCgJhaRISYWRtaW5QdWJLZXlTdGFraW5nGhoKAmFqEhRtYXhBbGxvY2F0aW9uc0Ftb3VudBoXCgJhaxIRYWN0aXZlTGF1bmNocGFkSWQaEQoCYWwSC2dldEFkbWluUHViGhEKAmFtEgtrZXlBZG1pblB1YhoNCgJhbhIHJG1hdGNoMBoMCgJhbxIGc3RyaW5nGg0KAmFwEgdub3RoaW5nGhIKAmFxEgxhZG1pblB1YktleTEaEgoCYXISDGFkbWluUHViS2V5MhoSCgJhcxIMYWRtaW5QdWJLZXkzGhIKAmF0EgxnZXRBc3NldEluZm8aDQoCYXUSB2Fzc2V0SWQaCAoCYXYSAmlkGg4KAmF3EghzdHJpbmdJZBoKCgJheBIEaW5mbxoLCgJheRIFd2F2ZXMaGAoCYXoSEmdldExhdW5jaHBhZE5leHRJZBoUCgFiEg9rZXlBZG1pblB1YktleTEaFAoCYkESDnRva2VuQXNzZXROYW1lGhMKAmJCEg10b2tlbkRlY2ltYWxzGhEKAmJDEgt0aWNrZXRQcmljZRoZCgJiRBITY29tbWlzc2lvblBlclRpY2tldBoVCgJiRRIPYnV5VGlja2V0QW1vdW50GhwKAmJGEhZhbGxvd2VkQnV5VGlja2V0QW1vdW50GiIKAmJHEhxhbGxvd2VkQnV5UHJpY2VXaXRoQ29taXNzaW9uGgwKAmJIEgZjaGFuZ2UaGgoCYkkSFGZyZWV6ZVRva2VuUGVyVGlja2V0GhMKAmJKEg0kdDAxMjQ5MTEyNTc4GhUKAmJLEg9wbXRBbW91bnRGcmVlemUaFgoCYkwSEHBtdEFzc2V0SWRGcmVlemUaEwoCYk0SDSR0MDEyNTk1MTI2ODYaGQoCYk4SE3BtdEZyZWV6ZVN0ckFzc2V0SWQaGAoCYk8SEnBtdEZyZWV6ZUFzc2V0TmFtZRoXCgJiUBIRcG10RnJlZXplRGVjaW1hbHMaFgoCYlESEG5lZWRGcmVlemVUb2tlbnMaHgoCYlISGHVzZXJCb3VnaHRUaWNrZXRzTnVtYmVycxocCgJiUxIWbGFzdEJvdWdodFRpY2tldE51bWJlchoRCgJiVBILYm91Z2h0UmFuZ2UaIQoCYlUSG25ld1VzZXJCb3VnaHRUaWNrZXRzTnVtYmVycxoJCgJiVhIDaW52Gg8KAmJXEgliYXNlRW50cnkaEwoCYlgSDSR0MDE0NzU3MTQ4MzIaEwoCYlkSDSR0MDE0ODM3MTQ5ODcaGQoCYloSE3VzZXJVc2RuSW5NYXJrZXRpbmcaEgoCYmESDGZyZWV6ZVBhcmFtcxoUCgJiYhIObGF1bmNocGFkSWRTdHIaEQoCYmMSCyR0MDYzNzg2NDUzGg8KAmJkEglwbXRBbW91bnQaEAoCYmUSCnBtdEFzc2V0SWQaEQoCYmYSCyR0MDY0NjI2NTM1GhMKAmJnEg1wbXRTdHJBc3NldElkGhIKAmJoEgxwbXRBc3NldE5hbWUaEQoCYmkSC3BtdERlY2ltYWxzGhsKAmJqEhVmcmVlemVBZGRpdGlvbmFsRW50cnkaCwoCYmsSBXJlZklkGhEKAmJsEgskdDA5MTQxOTIxNhoRCgJibRILJHQwOTIyMTkzNzEaEAoCYm4SCmJ1eUFzc2V0SWQaEwoCYm8SDWJ1eUFzc2V0U3RySWQaEgoCYnASDGJ1eUFzc2V0TmFtZRoWCgJicRIQYnV5QXNzZXREZWNpbWFscxoRCgJichILc3Rha2VkU3dvcHMaHQoCYnMSF2FsbG93ZWRUaWNrZXRzQW1vdW50QWxsGhkKAmJ0EhNib3VnaHRUaWNrZXRzQW1vdW50GhoKAmJ1EhRhbGxvd2VkVGlja2V0c0Ftb3VudBoTCgJidhINZnJlZXplVG9rZW5JZBoQCgJidxIKdG9rZW5QcmljZRoTCgJieBINJHQwMTExODMxMTMyNxoNCgJieRIHdG9rZW5JZBoVCgJiehIPdG9rZW5TdHJBc3NldElkGhQKAWMSD2tleUFkbWluUHViS2V5MhoVCgJjQRIPYm91Z2h0SENUaWNrZXRzGhUKAmNCEg91c2VyQ2xhaW1TdGF0dXMaFAoCY0MSDmZpbmFsaXplSGVpZ2h0GhMKAmNEEg0kdDAyNTQ1MjI1NjI5GhMKAmNFEg13b25uZWRUaWNrZXRzGhUKAmNGEg93b25uZWRIQ1RpY2tldHMaGgoCY0cSFGF3YWlsYWJsZUFsbG9jYXRpb25zGhgKAmNIEhJhbGxvd2VkQWxsb2NhdGlvbnMaEwoCY0kSDSR0MDI2NTQ1MjY2ODkaGgoCY0oSFHRyYW5zZmVyVG9rZW5zQW1vdW50GiEKAmNLEhtub3RBbGxvd2VkQWxsb2NhdGlvbnNUb2tlbnMaHAoCY0wSFmJ1eUFzc2V0Rm9yQWxsb2NhdGlvbnMaIAoCY00SGmJ1eUFzc2V0Rm9yVW53b25uZWRUaWNrZXRzGiIKAmNOEhxidXlBc3NldEZvckhDVW53b25uZWRUaWNrZXRzGhUKAmNPEg9jbGFpbWVkQnV5VG9rZW4aHAoCY1ASFnJldHVybmVkQnV5QXNzZXRBbW91bnQaFgoCY1ESEHRyYW5zZmVyQnV5QXNzZXQaEwoCY1ISDWNsYWltZWRQYXJhbXMaFAoCY1MSDnRyYW5zZmVyVG9rZW5zGhMKAmNUEg1jbGFpbWVkVG9rZW5zGhIKAmNVEgx1bmxvY2tQZXJpb2QaEQoCY1YSC2Jsb2NrSGVpZ2h0GhIKAmNXEgx1bmxvY2tIZWlnaHQaGAoCY1gSEmFsbG93ZWRTdGFydEFtb3VudBoZCgJjWRITYWxsb3dlZFRva2Vuc0Ftb3VudBoWCgJjWhIQY2xhaW1TdGF0dXNFbnRyeRoVCgJjYRIPdXNkbkluTWFya2V0aW5nGhcKAmNiEhFib3VnaHRBbGxvY2F0aW9ucxoTCgJjYxINJHQwMTU2NTYxNTgwMBoiCgJjZBIcYWxsb2NhdGlvblByaWNlV2l0aENvbWlzc2lvbhoaCgJjZRIUYnV5QWxsb2NhdGlvbnNBbW91bnQaEwoCY2YSDSR0MDE4MDU4MTgxMzMaEwoCY2cSDSR0MDE4MTM4MTgyODgaGwoCY2gSFWJvdWdodEhDVGlja2V0c0Ftb3VudBoZCgJjaRITaGlnaENvbXBldGl0aW9uU2FsZRoTCgJjahINJHQwMTk0NjExOTYwNRobCgJjaxIVYnV5UHJpY2VXaXRoQ29taXNzaW9uGg8KAmNsEgl2cmZIZWlnaHQaEAoCY20SCnNlY3JldFdvcmQaDwoCY24SCXNhdmVkSGFzaBoOCgJjbxIIY2FsY0hhc2gaEwoCY3ASDSR0MDIyMjE4MjIzNjgaEgoCY3ESDGNvbW1pc3Npb25IQxoYCgJjchISdHJhbnNmZXJlZEJ1eUFzc2V0GiEKAmNzEhtzd29wZmlNZW1iZXJzQnV5QXNzZXRBbW91bnQaHAoCY3QSFnN3b3BmaUhDQnV5QXNzZXRBbW91bnQaHAoCY3USFnN3b3BmaU1lbWJlcnNDb21pc3Npb24aFwoCY3YSEXN3b3BmaUhDQ29taXNzaW9uGiQKAmN3Eh50b3RhbEFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcaGAoCY3gSEm1hcmtldGluZ0NvbWlzc2lvbhoTCgJjeRINdW5zdGFrZUFtb3VudBoTCgJjehINYm91Z2h0VGlja2V0cxoUCgFkEg9rZXlBZG1pblB1YktleTMaFwoCZGESEXVzZXJUb2tlbnNGcmVlemVkGhkKAmRiEhNmcmVlemVUb2tlbkR1cmF0aW9uGhQKAmRjEg5ibG9ja0VuZEhlaWdodBoMCgJkZBIGYW1vdW50GhMKAmRlEg0kdDAzMjg1NDMzMDA0GggKAmRmEgJ0eBoMCgJkZxIGdmVyaWZ5GhkKAmRoEhNtdWx0aVNpZ25lZEJ5QWRtaW5zGhgKAmRpEhJhZG1pblB1YktleTFTaWduZWQaGAoCZGoSEmFkbWluUHViS2V5MlNpZ25lZBoYCgJkaxISYWRtaW5QdWJLZXkzU2lnbmVkGhMKAmRsEg1zaWduZWRCeUFkbWluGgkKAmRtEgNkdHgaJgoBZRIha2V5TGF1bmNocGFkRGF0YVRyYW5zYWN0aW9uU3RhdHVzGhcKAWYSEmtleUxhdW5jaHBhZE5leHRJZBoZCgFnEhRrZXlMYXVuY2hwYWRBY3RpdmVJZBoSCgFoEg1rZXlJbml0Q2FsbGVyGg8KAWkSCmtleUFkZHJlc3MaEgoBahINa2V5SW5pdEhlaWdodBoTCgFrEg5rZXlTdGFydEhlaWdodBoWCgFsEhFrZXlGaW5hbGlzZUhlaWdodBoRCgFtEgxrZXlDb21pc3Npb24aDwoBbhIKa2V5QXNzZXRJZBoYCgFvEhNrZXlUb3RhbFRva2VuQW1vdW50Gh8KAXASGmtleVRvdGFsQW1vdW50QnV5QXNzZXRTb2xkGhcKAXESEmtleVRva2Vuc1BlclRpY2tldBoVCgFyEhBrZXlQcmljZVBlclRva2VuGhUKAXMSEGtleVN3b3BQZXJUaWNrZXQaGwoBdBIWa2V5U3dvcGZpVGlja2V0c0Ftb3VudBocCgF1EhdrZXlDYW1wYWlnblRva2Vuc0Ftb3VudBobCgF2EhZrZXlUb2tlbnNQZXJBbGxvY2F0aW9uGhgKAXcSE2tleVRpY2tldExhc3ROdW1iZXIaGAoBeBITa2V5R292ZXJuYW5jZVN0YWtlZBoRCgF5EgxrZXlVc2VyUmVmSWQaEgoBehINa2V5VmVyaWZ5SGFzaAAAAEkAAAAAAWECAAAABmFjdGl2ZQAAAAABYgIAAAALYWRtaW5fcHViXzEAAAAAAWMCAAAAC2FkbWluX3B1Yl8yAAAAAAFkAgAAAAthZG1pbl9wdWJfMwAAAAABZQIAAAAhbGF1bmNocGFkX2RhdGFfdHJhbnNhY3Rpb25fc3RhdHVzAAAAAAFmAgAAABFsYXVuY2hwYWRfbmV4dF9pZAAAAAABZwIAAAATbGF1bmNocGFkX2FjdGl2ZV9pZAAAAAABaAIAAAALaW5pdF9jYWxsZXIAAAAAAWkCAAAACF9hZGRyZXNzAAAAAAFqAgAAAAxfaW5pdF9oZWlnaHQAAAAAAWsCAAAADV9zdGFydF9oZWlnaHQAAAAAAWwCAAAAEF9maW5hbGlzZV9oZWlnaHQAAAAAAW0CAAAACl9jb21pc3Npb24AAAAAAW4CAAAACV9hc3NldF9pZAAAAAABbwIAAAATX3RvdGFsX3Rva2VuX2Ftb3VudAAAAAABcAIAAAAVX3RvdGFsX2J1eV9hc3NldF9zb2xkAAAAAAFxAgAAABJfdG9rZW5zX3Blcl90aWNrZXQAAAAAAXICAAAAEF9wcmljZV9wZXJfdG9rZW4AAAAAAXMCAAAAEF9zd29wX3Blcl90aWNrZXQAAAAAAXQCAAAAF190aWNrZXRzX3N3b3BmaV9tZW1iZXJzAAAAAAF1AgAAABNfdG9rZW5zX2FjY2Vzc19saXN0AAAAAAF2AgAAABZfdG9rZW5zX3Blcl9hbGxvY2F0aW9uAAAAAAF3AgAAABNfdGlja2V0X2xhc3RfbnVtYmVyAAAAAAF4AgAAAAxfU1dPUF9hbW91bnQAAAAAAXkCAAAAB19yZWZfaWQAAAAAAXoCAAAADF92ZXJpZnlfaGFzaAAAAAABQQIAAAAJX2R1cmF0aW9uAAAAAAFCAgAAACdfdG90YWxfcHVyY2hhc2VkX2J1eV9hc3NldF9pbl9tYXJrZXRpbmcAAAAAAUMCAAAAMV90b3RhbF9wdXJjaGFzZWRfYnV5X2Fzc2V0X2luX21hcmtldGluZ19maW5hbGl6ZWQAAAAAAUQCAAAAE190cmFuc2Zlcl9idXlfYXNzZXQAAAAAAUUCAAAAFV9mcmVlemVfc3dvcF9kdXJhdGlvbgAAAAABRgIAAAAYX2ZyZWV6ZV9hZGRpdGlvbmFsX3Rva2VuAAAAAAFHAgAAABBfZnJlZXplX3Rva2VuX2lkAAAAAAFIAgAAABZfZnJlZXplX3Rva2VuX2R1cmF0aW9uAAAAAAFJAgAAABhfZnJlZXplX3Rva2VuX3Blcl90aWNrZXQAAAAAAUoCAAAACl9idXlfdG9rZW4AAAAAAUsCAAAADV9jbGFpbV9wYXJhbXMAAAAAAUwCAAAAG19oaWdoX2NvbXBldGl0aW9uX2NvbWlzc2lvbgAAAAABTQIAAAAWX2hpZ2hfY29tcGV0aXRpb25fc2FsZQAAAAABTgIAAAAkX2hpZ2hfY29tcGV0aXRpb25fdGlja2V0X2xhc3RfbnVtYmVyAAAAAAFPAgAAABlfdGlja2V0c19oaWdoX2NvbXBldGl0aW9uAAAAAAFQAgAAACZfdG90YWxfYnV5X2Fzc2V0X3NvbGRfaGlnaF9jb21wZXRpdGlvbgAAAAABUQIAAAAPX2NsYWltZWRfdG9rZW5zAAAAAAFSAgAAABNfY2xhaW1lZF9idXlfdG9rZW5zAAAAAAFTAgAAAA9fYm91Z2h0X3RpY2tldHMAAAAAAVQCAAAAD190aWNrZXRzX251bWJlcgAAAAABVQIAAAAgX3RpY2tldHNfbnVtYmVyX2hpZ2hfY29tcGV0aXRpb24AAAAAAVYCAAAAIF9ib3VnaHRfdGlja2V0c19oaWdoX2NvbXBldGl0aW9uAAAAAAFXAgAAAB1fYXZhaWxhYmxlX3B1cmNoYXNlX21hcmtldGluZwAAAAABWAIAAAAhX3B1cmNoYXNlZF9idXlfYXNzZXRfaW5fbWFya2V0aW5nAAAAAAFZAgAAABNfYm91Z2h0X2FsbG9jYXRpb25zAAAAAAFaAgAAAA1fY2xhaW1fc3RhdHVzAAAAAAJhYQIAAAAPX3RpY2tldHNfcmVzdWx0AAAAAAJhYgIAAAAgX3RpY2tldHNfcmVzdWx0X2hpZ2hfY29tcGV0aXRpb24AAAAAAmFjAgAAABRfZnJlZXplX3Rva2VuX2Ftb3VudAAAAAACYWQJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVeK/whomjW6QM1hdPISN96mN/D6OM7oHjgAAAAAAmFlCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXyVect296lgzLCCI5D3yGiYCibNyztxbtAAAAAAJhZgkBAAAAB0FkZHJlc3MAAAABAQAAABoBV6BRpy/wPSJ8xbXfMYJKm3TgPPkqMILhZwAAAAACYWcJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVfkDqc2T5IL15fPpB0/NRvPQ2rrqjzzcZ0AAAAAAmFo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", "height": 3013053, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: TgQnEj1CYL7RvUFCK1EHM6aU4YB8cFgCxGbgeu2syT1 Next: 34yy3epDTCAyDKooLbwXjWWcw3p5pf1bxVrFLmrGTmdY Diff:
OldNewDifferences
467467 let swopfiHCComission = fraction(swopfiHCBuyAssetAmount, commissionHC, 100)
468468 let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
469469 let marketingComission = fraction(totalAmountBuyAssetInMarketing, commission, 100)
470- let unstakeAmount = (((((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiMembersComission) + marketingComission) + swopfiHCBuyAssetAmount) + swopfiHCComission)
471- if ((transferedBuyAsset > (swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing)))
470+ let unstakeAmount = ((((((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiMembersComission) + marketingComission) + swopfiHCBuyAssetAmount) + swopfiHCComission) - transferedBuyAsset)
471+ if ((transferedBuyAsset > ((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiHCBuyAssetAmount)))
472472 then throw("Can't transfer negative value to project")
473473 else {
474474 let inv = if ((buyAssetId == USDN))
501501 else false)
502502 then throw("You can't claim because you don't buy anything")
503503 else {
504- let $t02540825585 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
505- let buyAssetId = $t02540825585._1
506- let buyAssetStrId = $t02540825585._2
507- let buyAssetName = $t02540825585._3
508- let buyAssetDecimals = $t02540825585._4
504+ let $t02545225629 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
505+ let buyAssetId = $t02545225629._1
506+ let buyAssetStrId = $t02545225629._2
507+ let buyAssetName = $t02545225629._3
508+ let buyAssetDecimals = $t02545225629._4
509509 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
510510 let wonnedHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedHighCompetitionTicketsAmount)), 0)
511511 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
514514 let allowedAllocations = min([boughtAllocations, awailableAllocations])
515515 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
516516 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
517- let $t02650126645 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
518- let tokenId = $t02650126645._1
519- let tokenStrAssetId = $t02650126645._2
520- let tokenAssetName = $t02650126645._3
521- let tokenDecimals = $t02650126645._4
517+ let $t02654526689 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
518+ let tokenId = $t02654526689._1
519+ let tokenStrAssetId = $t02654526689._2
520+ let tokenAssetName = $t02654526689._3
521+ let tokenDecimals = $t02654526689._4
522522 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
523523 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
524524 let transferTokensAmount = (((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation)) + (wonnedHCTickets * tokensPerTicket))
613613 @Callable(i)
614614 func transferBuyAsset (launchpadId,amount) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
615615 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
616- let $t03283032980 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
617- let buyAssetId = $t03283032980._1
618- let buyAssetStrId = $t03283032980._2
619- let buyAssetName = $t03283032980._3
620- let buyAssetDecimals = $t03283032980._4
621-[IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
616+ let $t03285433004 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
617+ let buyAssetId = $t03285433004._1
618+ let buyAssetStrId = $t03285433004._2
619+ let buyAssetName = $t03285433004._3
620+ let buyAssetDecimals = $t03285433004._4
621+ let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
622+ let inv = if (if ((amount > 0))
623+ then (buyAssetId == USDN)
624+ else false)
625+ then invoke(stakingUSDNAddress, "unlockNeutrino", [amount, toBase58String(USDN)], nil)
626+ else 0
627+ if ((inv == inv))
628+ then [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), (transferedBuyAsset + amount)), ScriptTransfer(projectAddress, amount, buyAssetId)]
629+ else throw("Strict value is not equal to itself.")
622630 }))
623631
624632
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyActive = "active"
55
66 let keyAdminPubKey1 = "admin_pub_1"
77
88 let keyAdminPubKey2 = "admin_pub_2"
99
1010 let keyAdminPubKey3 = "admin_pub_3"
1111
1212 let keyLaunchpadDataTransactionStatus = "launchpad_data_transaction_status"
1313
1414 let keyLaunchpadNextId = "launchpad_next_id"
1515
1616 let keyLaunchpadActiveId = "launchpad_active_id"
1717
1818 let keyInitCaller = "init_caller"
1919
2020 let keyAddress = "_address"
2121
2222 let keyInitHeight = "_init_height"
2323
2424 let keyStartHeight = "_start_height"
2525
2626 let keyFinaliseHeight = "_finalise_height"
2727
2828 let keyComission = "_comission"
2929
3030 let keyAssetId = "_asset_id"
3131
3232 let keyTotalTokenAmount = "_total_token_amount"
3333
3434 let keyTotalAmountBuyAssetSold = "_total_buy_asset_sold"
3535
3636 let keyTokensPerTicket = "_tokens_per_ticket"
3737
3838 let keyPricePerToken = "_price_per_token"
3939
4040 let keySwopPerTicket = "_swop_per_ticket"
4141
4242 let keySwopfiTicketsAmount = "_tickets_swopfi_members"
4343
4444 let keyCampaignTokensAmount = "_tokens_access_list"
4545
4646 let keyTokensPerAllocation = "_tokens_per_allocation"
4747
4848 let keyTicketLastNumber = "_ticket_last_number"
4949
5050 let keyGovernanceStaked = "_SWOP_amount"
5151
5252 let keyUserRefId = "_ref_id"
5353
5454 let keyVerifyHash = "_verify_hash"
5555
5656 let keyDuration = "_duration"
5757
5858 let keyAmountBuyAssetInMarketing = "_total_purchased_buy_asset_in_marketing"
5959
6060 let keyAmountBuyAssetInMarketingFinalized = "_total_purchased_buy_asset_in_marketing_finalized"
6161
6262 let keyTransferBuyAsset = "_transfer_buy_asset"
6363
6464 let keyFreezSwopDuration = "_freeze_swop_duration"
6565
6666 let keyFreezeAdditionalToken = "_freeze_additional_token"
6767
6868 let keyFreezeTokenId = "_freeze_token_id"
6969
7070 let keyFreezeTokenDuration = "_freeze_token_duration"
7171
7272 let keyFreezeTokenPerTicket = "_freeze_token_per_ticket"
7373
7474 let keyBuyToken = "_buy_token"
7575
7676 let keyClaimParams = "_claim_params"
7777
7878 let keyHighCompetitionComission = "_high_competition_comission"
7979
8080 let keyHighCompetitionSale = "_high_competition_sale"
8181
8282 let keyHCTicketLastNumber = "_high_competition_ticket_last_number"
8383
8484 let keyHighCompetitionAmount = "_tickets_high_competition"
8585
8686 let keyTotalAmountBuyAssetSoldHC = "_total_buy_asset_sold_high_competition"
8787
8888 let keyUserClaimedTokens = "_claimed_tokens"
8989
9090 let keyUserClaimedBuyTokens = "_claimed_buy_tokens"
9191
9292 let keyUserBoughtTicketsAmount = "_bought_tickets"
9393
9494 let keyUserTickets = "_tickets_number"
9595
9696 let keyUserHCTickets = "_tickets_number_high_competition"
9797
9898 let keyUserHCBoughtTicketsAmount = "_bought_tickets_high_competition"
9999
100100 let keyUserAvailableAllocations = "_available_purchase_marketing"
101101
102102 let keyUserAmountBuyAssetInMarketing = "_purchased_buy_asset_in_marketing"
103103
104104 let keyUserBoughtAllocations = "_bought_allocations"
105105
106106 let keyUserClaimStatus = "_claim_status"
107107
108108 let keyUserWinnedTicketsAmount = "_tickets_result"
109109
110110 let keyUserWinnedHighCompetitionTicketsAmount = "_tickets_result_high_competition"
111111
112112 let keyUserFreezeToken = "_freeze_token_amount"
113113
114114 let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
115115
116116 let governance = Address(base58'3PLHVWCqA9DJPDbadUofTohnCULLauiDWhS')
117117
118118 let commissionWallet = Address(base58'3PGYafJ2GuqPckmZNywet8moiPnBHz51Xdg')
119119
120120 let stakingUSDNAddress = Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ')
121121
122122 let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
123123
124124 let adminPubKeyStaking = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
125125
126126 let maxAllocationsAmount = 2
127127
128128 let activeLaunchpadId = valueOrElse(getIntegerValue(this, keyLaunchpadActiveId), -1)
129129
130130 func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) {
131131 case string: String =>
132132 fromBase58String(string)
133133 case nothing =>
134134 throw("Admin public key is empty")
135135 }
136136
137137
138138 let adminPubKey1 = getAdminPub(keyAdminPubKey1)
139139
140140 let adminPubKey2 = getAdminPub(keyAdminPubKey2)
141141
142142 let adminPubKey3 = getAdminPub(keyAdminPubKey3)
143143
144144 func getAssetInfo (assetId) = match assetId {
145145 case id: ByteVector =>
146146 let stringId = toBase58String(id)
147147 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
148148 $Tuple3(stringId, info.name, info.decimals)
149149 case waves: Unit =>
150150 $Tuple3("WAVES", "WAVES", 8)
151151 case _ =>
152152 throw("Match error")
153153 }
154154
155155
156156 func getLaunchpadNextId () = valueOrElse(getInteger(this, keyLaunchpadNextId), 1)
157157
158158
159159 let active = valueOrElse(getBoolean(this, keyActive), true)
160160
161161 func isActive () = if (active)
162162 then unit
163163 else throw("DApp is inactive at this moment")
164164
165165
166166 func isAdminCall (i) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
167167 then unit
168168 else throw("Only admin can call this function")
169169
170170
171171 func getAssetInfoFromString (assetStr) = if ((assetStr == "WAVES"))
172172 then $Tuple4(unit, "WAVES", "WAVES", 8)
173173 else {
174174 let stringId = assetStr
175175 let id = fromBase58String(assetStr)
176176 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
177177 $Tuple4(id, stringId, info.name, info.decimals)
178178 }
179179
180180
181181 @Callable(i)
182182 func hashingRandom (launchpadId,hash) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), [StringEntry((toString(launchpadId) + keyVerifyHash), hash)]))
183183
184184
185185
186186 @Callable(i)
187187 func initCaller (address) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), [StringEntry(keyInitCaller, address)]))
188188
189189
190190
191191 @Callable(i)
192192 func init (projectAddress,startHeight,duration,buyToken,commission,tokensPerTicket,pricePerToken,swopfiTicketsAmount,campaignTokensAmount,tokensPerAllocation,swopPerTicket,swopFreezeDuration,claimParams,HighCompetitionSale,highCompetitionComission,highCompetitionTicketsAmount,freezeAdditionalToken,freezeParams) = valueOrElse(isActive(), if ((toString(i.caller) != valueOrElse(getString(this, keyInitCaller), "")))
193193 then throw("Only project admin can call init function")
194194 else if ((size(i.payments) != 1))
195195 then throw("One attached payment expected")
196196 else if ((height > startHeight))
197197 then throw("Start height must be greater than blockchain height")
198198 else if (if (freezeAdditionalToken)
199199 then (size(freezeParams) != 3)
200200 else false)
201201 then throw("Freeze params list must have 3 items")
202202 else {
203203 let launchpadId = getLaunchpadNextId()
204204 let launchpadIdStr = toString(launchpadId)
205205 let $t063786453 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
206206 let pmtAmount = $t063786453._1
207207 let pmtAssetId = $t063786453._2
208208 let $t064626535 = getAssetInfo(pmtAssetId)
209209 let pmtStrAssetId = $t064626535._1
210210 let pmtAssetName = $t064626535._2
211211 let pmtDecimals = $t064626535._3
212212 let freezeAdditionalEntry = if (freezeAdditionalToken)
213213 then [BooleanEntry((launchpadIdStr + keyFreezeAdditionalToken), true), StringEntry((launchpadIdStr + keyFreezeTokenId), freezeParams[0]), IntegerEntry((launchpadIdStr + keyFreezeTokenDuration), parseIntValue(freezeParams[1])), IntegerEntry((launchpadIdStr + keyFreezeTokenPerTicket), parseIntValue(freezeParams[2]))]
214214 else nil
215215 ([IntegerEntry((pmtStrAssetId + "_launchpad"), launchpadId), IntegerEntry(keyLaunchpadNextId, (launchpadId + 1)), StringEntry((launchpadIdStr + keyAddress), projectAddress), IntegerEntry((launchpadIdStr + keyInitHeight), height), IntegerEntry((launchpadIdStr + keyStartHeight), startHeight), IntegerEntry((launchpadIdStr + keyDuration), duration), StringEntry((launchpadIdStr + keyBuyToken), buyToken), IntegerEntry((launchpadIdStr + keyFreezSwopDuration), swopFreezeDuration), IntegerEntry((launchpadIdStr + keyTotalTokenAmount), pmtAmount), StringEntry((launchpadIdStr + keyAssetId), pmtStrAssetId), IntegerEntry((launchpadIdStr + keyComission), commission), IntegerEntry((launchpadIdStr + keyTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyHCTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyTokensPerTicket), tokensPerTicket), IntegerEntry((launchpadIdStr + keyPricePerToken), pricePerToken), IntegerEntry((launchpadIdStr + keySwopPerTicket), swopPerTicket), IntegerEntry((launchpadIdStr + keySwopfiTicketsAmount), swopfiTicketsAmount), IntegerEntry((launchpadIdStr + keyCampaignTokensAmount), campaignTokensAmount), IntegerEntry((launchpadIdStr + keyTokensPerAllocation), tokensPerAllocation), StringEntry((launchpadIdStr + keyClaimParams), makeString(claimParams, ",")), BooleanEntry((launchpadIdStr + keyHighCompetitionSale), HighCompetitionSale), IntegerEntry((launchpadIdStr + keyHighCompetitionComission), highCompetitionComission), IntegerEntry((launchpadIdStr + keyHighCompetitionAmount), highCompetitionTicketsAmount), IntegerEntry(keyLaunchpadActiveId, launchpadId), StringEntry(keyInitCaller, "")] ++ freezeAdditionalEntry)
216216 })
217217
218218
219219
220220 @Callable(i)
221221 func commitSwopfiSale (launchpadId,refId) = valueOrElse(isActive(), {
222222 let $t091419216 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
223223 let pmtAmount = $t091419216._1
224224 let pmtAssetId = $t091419216._2
225225 let $t092219371 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
226226 let buyAssetId = $t092219371._1
227227 let buyAssetStrId = $t092219371._2
228228 let buyAssetName = $t092219371._3
229229 let buyAssetDecimals = $t092219371._4
230230 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
231231 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
232232 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
233233 let allowedTicketsAmount = (allowedTicketsAmountAll - boughtTicketsAmount)
234234 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
235235 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
236236 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
237237 if ((activeLaunchpadId != launchpadId))
238238 then throw("There is no active launchpad or this launchpad is ended")
239239 else if ((startHeight > height))
240240 then throw("Launchpad sale not started yet")
241241 else if ((height > (startHeight + duration)))
242242 then throw("Launchpad sale ended")
243243 else if (if (!(freezeAdditionalToken))
244244 then if ((size(i.payments) != 1))
245245 then true
246246 else (pmtAssetId != buyAssetId)
247247 else false)
248248 then throw((("One attached payment in " + buyAssetName) + " expected"))
249249 else if (if (freezeAdditionalToken)
250250 then if ((size(i.payments) != 2))
251251 then true
252252 else (pmtAssetId != buyAssetId)
253253 else false)
254254 then {
255255 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
256256 throw(((("Two attached payments expected: First in " + buyAssetName) + ", second in ") + freezeTokenId))
257257 }
258258 else if (if ((0 >= allowedTicketsAmountAll))
259259 then true
260260 else (0 >= allowedTicketsAmount))
261261 then throw("Not enought SWOP in staking to buy tickets")
262262 else {
263263 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
264264 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
265265 let $t01118311327 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
266266 let tokenId = $t01118311327._1
267267 let tokenStrAssetId = $t01118311327._2
268268 let tokenAssetName = $t01118311327._3
269269 let tokenDecimals = $t01118311327._4
270270 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
271271 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
272272 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
273273 let allowedBuyTicketAmount = min([buyTicketAmount, allowedTicketsAmount])
274274 let allowedBuyPriceWithComission = (allowedBuyTicketAmount * (ticketPrice + commissionPerTicket))
275275 let change = (pmtAmount - allowedBuyPriceWithComission)
276276 if ((buyTicketAmount == 0))
277277 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
278278 else if ((change != 0))
279279 then throw((((("Wrong payment. To buy " + toString(allowedBuyTicketAmount)) + "tickets you need to pay ") + toString(allowedBuyPriceWithComission)) + buyAssetName))
280280 else {
281281 let freezeAdditionalEntry = if (freezeAdditionalToken)
282282 then {
283283 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
284284 let freezeTokenPerTicket = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenPerTicket))
285285 let $t01249112578 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
286286 let pmtAmountFreeze = $t01249112578._1
287287 let pmtAssetIdFreeze = $t01249112578._2
288288 let $t01259512686 = getAssetInfo(pmtAssetId)
289289 let pmtFreezeStrAssetId = $t01259512686._1
290290 let pmtFreezeAssetName = $t01259512686._2
291291 let pmtFreezeDecimals = $t01259512686._3
292292 let needFreezeTokens = (freezeTokenPerTicket * buyTicketAmount)
293293 if (if ((pmtFreezeStrAssetId != freezeTokenId))
294294 then true
295295 else (needFreezeTokens != pmtAmountFreeze))
296296 then throw((((("You need to add " + toString(needFreezeTokens)) + " ") + pmtFreezeAssetName) + " as a second payment"))
297297 else [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), pmtAmountFreeze)]
298298 }
299299 else nil
300300 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets)), "")
301301 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyTicketLastNumber))
302302 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + allowedBuyTicketAmount)))
303303 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
304304 then ("," + boughtRange)
305305 else ("" + boughtRange)))
306306 let inv = if ((buyAssetId == USDN))
307307 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
308308 else 0
309309 if ((inv == inv))
310310 then {
311311 let baseEntry = ([IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount), (boughtTicketsAmount + allowedBuyTicketAmount)), IntegerEntry((toString(launchpadId) + keyTicketLastNumber), (lastBoughtTicketNumber + allowedBuyTicketAmount)), StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets), newUserBoughtTicketsNumbers)] ++ freezeAdditionalEntry)
312312 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
313313 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
314314 else baseEntry
315315 }
316316 else throw("Strict value is not equal to itself.")
317317 }
318318 }
319319 })
320320
321321
322322
323323 @Callable(i)
324324 func commitAccessListSale (launchpadId,refId) = valueOrElse(isActive(), {
325325 let $t01475714832 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
326326 let pmtAmount = $t01475714832._1
327327 let pmtAssetId = $t01475714832._2
328328 let $t01483714987 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
329329 let buyAssetId = $t01483714987._1
330330 let buyAssetStrId = $t01483714987._2
331331 let buyAssetName = $t01483714987._3
332332 let buyAssetDecimals = $t01483714987._4
333333 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing)), 0)
334334 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountBuyAssetInMarketing)), 0)
335335 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
336336 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
337337 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
338338 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
339339 let $t01565615800 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
340340 let tokenId = $t01565615800._1
341341 let tokenStrAssetId = $t01565615800._2
342342 let tokenAssetName = $t01565615800._3
343343 let tokenDecimals = $t01565615800._4
344344 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
345345 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
346346 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
347347 if ((activeLaunchpadId != launchpadId))
348348 then throw("There is no active launchpad or this launchpad is ended")
349349 else if ((startHeight > height))
350350 then throw("Launchpad sale not started yet")
351351 else if ((height > (startHeight + duration)))
352352 then throw("Launchpad sale ended")
353353 else if (if ((size(i.payments) != 1))
354354 then true
355355 else (pmtAssetId != buyAssetId))
356356 then throw((("One attached payment in " + buyAssetName) + " expected"))
357357 else if ((boughtAllocations >= maxAllocationsAmount))
358358 then throw((("You can buy only " + toString(maxAllocationsAmount)) + "allocations"))
359359 else if (if ((allocationPriceWithComission != pmtAmount))
360360 then ((allocationPriceWithComission * 2) != pmtAmount)
361361 else false)
362362 then throw(((("Wrong payment. You can buy 1 or 2 allocations for " + toString(allocationPriceWithComission)) + buyAssetName) + " per allocation"))
363363 else {
364364 let buyAllocationsAmount = (pmtAmount / allocationPriceWithComission)
365365 let inv = if ((buyAssetId == USDN))
366366 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
367367 else 0
368368 if ((inv == inv))
369369 then {
370370 let baseEntry = [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations), (boughtAllocations + buyAllocationsAmount)), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing), (userUsdnInMarketing + pmtAmount)), IntegerEntry((toString(launchpadId) + keyAmountBuyAssetInMarketing), (usdnInMarketing + pmtAmount))]
371371 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
372372 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
373373 else baseEntry
374374 }
375375 else throw("Strict value is not equal to itself.")
376376 }
377377 })
378378
379379
380380
381381 @Callable(i)
382382 func commitHighCompetitionSale (launchpadId,refId) = valueOrElse(isActive(), {
383383 let $t01805818133 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
384384 let pmtAmount = $t01805818133._1
385385 let pmtAssetId = $t01805818133._2
386386 let $t01813818288 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
387387 let buyAssetId = $t01813818288._1
388388 let buyAssetStrId = $t01813818288._2
389389 let buyAssetName = $t01813818288._3
390390 let buyAssetDecimals = $t01813818288._4
391391 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
392392 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
393393 let boughtHCTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
394394 let highCompetitionSale = valueOrElse(getBoolean(this, (toString(launchpadId) + keyHighCompetitionSale)), false)
395395 if ((activeLaunchpadId != launchpadId))
396396 then throw("There is no active launchpad or this launchpad is ended")
397397 else if (!(highCompetitionSale))
398398 then throw("There is no high competition sale for this launchpad")
399399 else if ((startHeight > height))
400400 then throw("Launchpad sale not started yet")
401401 else if ((height > (startHeight + duration)))
402402 then throw("Launchpad sale ended")
403403 else if (if ((size(i.payments) != 1))
404404 then true
405405 else (pmtAssetId != buyAssetId))
406406 then throw((("One attached payment in " + buyAssetName) + " expected"))
407407 else {
408408 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
409409 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
410410 let $t01946119605 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
411411 let tokenId = $t01946119605._1
412412 let tokenStrAssetId = $t01946119605._2
413413 let tokenAssetName = $t01946119605._3
414414 let tokenDecimals = $t01946119605._4
415415 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
416416 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission)), 100)
417417 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
418418 let buyPriceWithComission = (buyTicketAmount * (ticketPrice + commissionPerTicket))
419419 let change = (pmtAmount - buyPriceWithComission)
420420 if ((buyTicketAmount == 0))
421421 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
422422 else if ((change != 0))
423423 then throw((((("Wrong payment. To buy " + toString(buyTicketAmount)) + "tickets you need to pay ") + toString(buyPriceWithComission)) + buyAssetName))
424424 else {
425425 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCTickets)), "")
426426 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyHCTicketLastNumber))
427427 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + buyTicketAmount)))
428428 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
429429 then ("," + boughtRange)
430430 else ("" + boughtRange)))
431431 let inv = if ((buyAssetId == USDN))
432432 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
433433 else 0
434434 if ((inv == inv))
435435 then {
436436 let baseEntry = [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount), (boughtHCTicketsAmount + buyTicketAmount)), IntegerEntry((toString(launchpadId) + keyHCTicketLastNumber), (lastBoughtTicketNumber + buyTicketAmount)), StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCTickets), newUserBoughtTicketsNumbers)]
437437 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
438438 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
439439 else baseEntry
440440 }
441441 else throw("Strict value is not equal to itself.")
442442 }
443443 }
444444 })
445445
446446
447447
448448 @Callable(i)
449449 func finalise (launchpadId,vrfHeight,secretWord) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
450450 let savedHash = getStringValue(this, (toString(launchpadId) + keyVerifyHash))
451451 let calcHash = toBase58String(sha256((toBytes(vrfHeight) + toBytes(secretWord))))
452452 if ((calcHash != savedHash))
453453 then throw("vrf Height hash not matching")
454454 else {
455455 let $t02221822368 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
456456 let buyAssetId = $t02221822368._1
457457 let buyAssetStrId = $t02221822368._2
458458 let buyAssetName = $t02221822368._3
459459 let buyAssetDecimals = $t02221822368._4
460460 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
461461 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
462462 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
463463 let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
464464 let swopfiMembersBuyAssetAmount = getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSold))
465465 let swopfiHCBuyAssetAmount = valueOrElse(getInteger(this, (toString(launchpadId) + keyTotalAmountBuyAssetSoldHC)), 0)
466466 let swopfiMembersComission = fraction(swopfiMembersBuyAssetAmount, commission, 100)
467467 let swopfiHCComission = fraction(swopfiHCBuyAssetAmount, commissionHC, 100)
468468 let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
469469 let marketingComission = fraction(totalAmountBuyAssetInMarketing, commission, 100)
470- let unstakeAmount = (((((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiMembersComission) + marketingComission) + swopfiHCBuyAssetAmount) + swopfiHCComission)
471- if ((transferedBuyAsset > (swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing)))
470+ let unstakeAmount = ((((((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiMembersComission) + marketingComission) + swopfiHCBuyAssetAmount) + swopfiHCComission) - transferedBuyAsset)
471+ if ((transferedBuyAsset > ((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiHCBuyAssetAmount)))
472472 then throw("Can't transfer negative value to project")
473473 else {
474474 let inv = if ((buyAssetId == USDN))
475475 then invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toBase58String(USDN)], nil)
476476 else 0
477477 if ((inv == inv))
478478 then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, (((swopfiMembersBuyAssetAmount + swopfiHCBuyAssetAmount) + totalAmountBuyAssetInMarketing) - transferedBuyAsset), buyAssetId), ScriptTransfer(commissionWallet, ((swopfiMembersComission + marketingComission) + swopfiHCComission), buyAssetId)]
479479 else throw("Strict value is not equal to itself.")
480480 }
481481 }
482482 }))
483483
484484
485485
486486 @Callable(i)
487487 func claim (launchpadId) = valueOrElse(isActive(), {
488488 let boughtTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
489489 let boughtHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
490490 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
491491 let userClaimStatus = valueOrElse(getBoolean(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus)), false)
492492 let finalizeHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)), 0)
493493 if ((finalizeHeight == 0))
494494 then throw("You can't claim because results are not finalized")
495495 else if (userClaimStatus)
496496 then throw("You are already claimed")
497497 else if (if (if ((boughtTickets == 0))
498498 then (boughtAllocations == 0)
499499 else false)
500500 then (boughtHCTickets == 0)
501501 else false)
502502 then throw("You can't claim because you don't buy anything")
503503 else {
504- let $t02540825585 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
505- let buyAssetId = $t02540825585._1
506- let buyAssetStrId = $t02540825585._2
507- let buyAssetName = $t02540825585._3
508- let buyAssetDecimals = $t02540825585._4
504+ let $t02545225629 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
505+ let buyAssetId = $t02545225629._1
506+ let buyAssetStrId = $t02545225629._2
507+ let buyAssetName = $t02545225629._3
508+ let buyAssetDecimals = $t02545225629._4
509509 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
510510 let wonnedHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedHighCompetitionTicketsAmount)), 0)
511511 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
512512 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
513513 let commissionHC = valueOrElse(getInteger(this, (toString(launchpadId) + keyHighCompetitionComission)), 0)
514514 let allowedAllocations = min([boughtAllocations, awailableAllocations])
515515 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
516516 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
517- let $t02650126645 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
518- let tokenId = $t02650126645._1
519- let tokenStrAssetId = $t02650126645._2
520- let tokenAssetName = $t02650126645._3
521- let tokenDecimals = $t02650126645._4
517+ let $t02654526689 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
518+ let tokenId = $t02654526689._1
519+ let tokenStrAssetId = $t02654526689._2
520+ let tokenAssetName = $t02654526689._3
521+ let tokenDecimals = $t02654526689._4
522522 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
523523 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
524524 let transferTokensAmount = (((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation)) + (wonnedHCTickets * tokensPerTicket))
525525 let notAllowedAllocationsTokens = ((boughtAllocations - allowedAllocations) * tokensPerAllocation)
526526 let buyAssetForAllocations = fraction(fraction(notAllowedAllocationsTokens, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
527527 let buyAssetForUnwonnedTickets = fraction(((boughtTickets - wonnedTickets) * ticketPrice), (100 + commission), 100)
528528 let buyAssetForHCUnwonnedTickets = fraction(((boughtHCTickets - wonnedHCTickets) * ticketPrice), (100 + commissionHC), 100)
529529 let claimedBuyToken = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedBuyTokens)), 0)
530530 if (if (if ((0 > buyAssetForAllocations))
531531 then true
532532 else (0 > buyAssetForUnwonnedTickets))
533533 then true
534534 else (0 > buyAssetForHCUnwonnedTickets))
535535 then throw("Error with allowed allocation param or wonned tickets param please contact support")
536536 else {
537537 let returnedBuyAssetAmount = (((buyAssetForUnwonnedTickets + buyAssetForHCUnwonnedTickets) + buyAssetForAllocations) - claimedBuyToken)
538538 let transferBuyAsset = if ((returnedBuyAssetAmount > 0))
539539 then [ScriptTransfer(i.caller, returnedBuyAssetAmount, buyAssetId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedBuyTokens), returnedBuyAssetAmount)]
540540 else nil
541541 let inv = if (if ((returnedBuyAssetAmount > 0))
542542 then (buyAssetId == USDN)
543543 else false)
544544 then invoke(stakingUSDNAddress, "unlockNeutrino", [returnedBuyAssetAmount, toBase58String(USDN)], nil)
545545 else 0
546546 if ((inv == inv))
547547 then {
548548 let claimedParams = split(valueOrElse(getString(this, (toString(launchpadId) + keyClaimParams)), "claimAll"), ",")
549549 if ((claimedParams[0] == "claimAll"))
550550 then {
551551 let transferTokens = if ((transferTokensAmount > 0))
552552 then [ScriptTransfer(i.caller, transferTokensAmount, tokenId)]
553553 else nil
554554 (([BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens), transferTokensAmount)] ++ transferTokens) ++ transferBuyAsset)
555555 }
556556 else if ((claimedParams[0] == "claimPeriod"))
557557 then {
558558 let claimedTokens = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens)), 0)
559559 let unlockPeriod = value(parseInt(claimedParams[2]))
560560 let blockHeight = (value(parseInt(claimedParams[3])) + finalizeHeight)
561561 let unlockHeight = (unlockPeriod + blockHeight)
562562 let allowedStartAmount = fraction(transferTokensAmount, value(parseInt(claimedParams[1])), 100)
563563 let allowedTokensAmount = (allowedStartAmount + (if ((height > blockHeight))
564564 then (fraction((transferTokensAmount - allowedStartAmount), (min([height, unlockHeight]) - blockHeight), unlockPeriod) - claimedTokens)
565565 else (0 - claimedTokens)))
566566 let claimStatusEntry = if ((transferTokensAmount >= (claimedTokens + allowedTokensAmount)))
567567 then [BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true)]
568568 else nil
569569 if (if ((allowedTokensAmount > 0))
570570 then true
571571 else (returnedBuyAssetAmount > 0))
572572 then {
573573 let transferTokens = if ((allowedTokensAmount > 0))
574574 then [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens), (claimedTokens + allowedTokensAmount)), ScriptTransfer(i.caller, allowedTokensAmount, tokenId)]
575575 else nil
576576 (transferBuyAsset ++ transferTokens)
577577 }
578578 else throw("Nothing to claim")
579579 }
580580 else throw("Unknown claim function")
581581 }
582582 else throw("Strict value is not equal to itself.")
583583 }
584584 }
585585 })
586586
587587
588588
589589 @Callable(i)
590590 func claimFreezeToken (launchpadId) = valueOrElse(isActive(), {
591591 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
592592 if (!(isDefined(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)))))
593593 then throw("You can't claim because results are not finalized")
594594 else if (!(freezeAdditionalToken))
595595 then throw("There are no additional token freezing for this launchpad")
596596 else {
597597 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyFreezeTokenId)))
598598 let userTokensFreezed = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken)), 0)
599599 let startHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyStartHeight)), 0)
600600 let duration = valueOrElse(getInteger(this, (toString(launchpadId) + keyDuration)), 0)
601601 let freezeTokenDuration = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenDuration))
602602 let blockEndHeight = ((startHeight + duration) + freezeTokenDuration)
603603 if ((userTokensFreezed == 0))
604604 then throw("You are already claimed your tokens or not paid anything")
605605 else if ((blockEndHeight > height))
606606 then throw(("Your tokens freezed teel " + toString(blockEndHeight)))
607607 else [ScriptTransfer(i.caller, userTokensFreezed, tokenId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), 0)]
608608 }
609609 })
610610
611611
612612
613613 @Callable(i)
614614 func transferBuyAsset (launchpadId,amount) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
615615 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
616- let $t03283032980 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
617- let buyAssetId = $t03283032980._1
618- let buyAssetStrId = $t03283032980._2
619- let buyAssetName = $t03283032980._3
620- let buyAssetDecimals = $t03283032980._4
621-[IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
616+ let $t03285433004 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
617+ let buyAssetId = $t03285433004._1
618+ let buyAssetStrId = $t03285433004._2
619+ let buyAssetName = $t03285433004._3
620+ let buyAssetDecimals = $t03285433004._4
621+ let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
622+ let inv = if (if ((amount > 0))
623+ then (buyAssetId == USDN)
624+ else false)
625+ then invoke(stakingUSDNAddress, "unlockNeutrino", [amount, toBase58String(USDN)], nil)
626+ else 0
627+ if ((inv == inv))
628+ then [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), (transferedBuyAsset + amount)), ScriptTransfer(projectAddress, amount, buyAssetId)]
629+ else throw("Strict value is not equal to itself.")
622630 }))
623631
624632
625633
626634 @Callable(i)
627635 func shutdown () = valueOrElse(isAdminCall(i), if (!(active))
628636 then throw("DApp already inactive")
629637 else [BooleanEntry(keyActive, false)])
630638
631639
632640
633641 @Callable(i)
634642 func activate () = valueOrElse(isAdminCall(i), if (active)
635643 then throw("DApp already active")
636644 else [BooleanEntry(keyActive, true)])
637645
638646
639647 @Verifier(tx)
640648 func verify () = {
641649 let multiSignedByAdmins = {
642650 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
643651 then 1
644652 else 0
645653 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
646654 then 1
647655 else 0
648656 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
649657 then 1
650658 else 0
651659 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
652660 }
653661 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
654662 then true
655663 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
656664 then true
657665 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
658666 then true
659667 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKeyStaking)
660668 match tx {
661669 case dtx: DataTransaction =>
662670 if (valueOrElse(getBoolean(oracle, keyLaunchpadDataTransactionStatus), false))
663671 then signedByAdmin
664672 else false
665673 case _ =>
666674 multiSignedByAdmins
667675 }
668676 }
669677

github/deemru/w8io/3ef1775 
115.99 ms