tx · 4m839uyGdk376gtJGbomWQJ5WJhgMJppKCmthS4LtLGb

3MzDGFvPnXVbA4wCacqcVnfVJPwG952KVAg:  -0.01400000 Waves

2022.02.21 12:37 [1933242] smart account 3MzDGFvPnXVbA4wCacqcVnfVJPwG952KVAg > SELF 0.00000000 Waves

{ "type": 13, "id": "4m839uyGdk376gtJGbomWQJ5WJhgMJppKCmthS4LtLGb", "fee": 1400000, "feeAssetId": null, "timestamp": 1645436247231, "version": 2, "chainId": 84, "sender": "3MzDGFvPnXVbA4wCacqcVnfVJPwG952KVAg", "senderPublicKey": "CViCXhHrygDDAtVc1uFczxe6ANj9tBz5PGQDS1yWZqgy", "proofs": [ "4WedaAfF8nTNffXWq2uDmDMozQXtkhA1Bq9CdQXUBxmzBV9pLt4yN8bxisBEySLAF93vUbfMYX2KMGum7rN4xjwv", "4KjjgpJ2BoQU82mEEofG5BBjZhJG99ywoU5vR4RKrgAV2qJzEv1nQr2SkkxZWt76471AMBGARvoTfxUDXfP7YMD9" ], "script": "base64:AAIFAAAAAAAAFLQIAhIECgIBCBIDCgEIEhQKEggBAQgBAQEBAQEBARgEAQEEGBIECgIBCBIECgIBCBIECgIBCBIFCgMBAQgSAwoBARIDCgEBEgQKAgEBEgASABoQCgFBEgtrZXlEdXJhdGlvbhohCgFCEhxrZXlBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGioKAUMSJWtleUFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmdGaW5hbGl6ZWQaGAoBRBITa2V5VHJhbnNmZXJCdXlBc3NldBoZCgFFEhRrZXlGcmVlelN3b3BEdXJhdGlvbhodCgFGEhhrZXlGcmVlemVBZGRpdGlvbmFsVG9rZW4aFQoBRxIQa2V5RnJlZXplVG9rZW5JZBobCgFIEhZrZXlGcmVlemVUb2tlbkR1cmF0aW9uGhwKAUkSF2tleUZyZWV6ZVRva2VuUGVyVGlja2V0GhAKAUoSC2tleUJ1eVRva2VuGhMKAUsSDmtleUNsYWltUGFyYW1zGiAKAUwSG2tleUhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbhobCgFNEhZrZXlIaWdoQ29tcGV0aXRpb25TYWxlGhoKAU4SFWtleUhDVGlja2V0TGFzdE51bWJlchodCgFPEhhrZXlIaWdoQ29tcGV0aXRpb25BbW91bnQaIQoBUBIca2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGRIQxoZCgFREhRrZXlVc2VyQ2xhaW1lZFRva2VucxocCgFSEhdrZXlVc2VyQ2xhaW1lZEJ1eVRva2VucxofCgFTEhprZXlVc2VyQm91Z2h0VGlja2V0c0Ftb3VudBoTCgFUEg5rZXlVc2VyVGlja2V0cxoVCgFVEhBrZXlVc2VySENUaWNrZXRzGiEKAVYSHGtleVVzZXJIQ0JvdWdodFRpY2tldHNBbW91bnQaIAoBVxIba2V5VXNlckF2YWlsYWJsZUFsbG9jYXRpb25zGiUKAVgSIGtleVVzZXJBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGh0KAVkSGGtleVVzZXJCb3VnaHRBbGxvY2F0aW9ucxoXCgFaEhJrZXlVc2VyQ2xhaW1TdGF0dXMaDgoBYRIJa2V5QWN0aXZlGhYKAmFBEhBzdGFrZWRVc2RuQW1vdW50GgwKAmFCEgZhY3RpdmUaDgoCYUMSCGlzQWN0aXZlGhEKAmFEEgtpc0FkbWluQ2FsbBoHCgJhRRIBaRocCgJhRhIWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZxoOCgJhRxIIYXNzZXRTdHIaEQoCYUgSC2xhdW5jaHBhZElkGgoKAmFJEgRoYXNoGg0KAmFKEgdhZGRyZXNzGhQKAmFLEg5wcm9qZWN0QWRkcmVzcxoRCgJhTBILc3RhcnRIZWlnaHQaDgoCYU0SCGR1cmF0aW9uGg4KAmFOEghidXlUb2tlbhoQCgJhTxIKY29tbWlzc2lvbhoVCgJhUBIPdG9rZW5zUGVyVGlja2V0GhMKAmFREg1wcmljZVBlclRva2VuGhkKAmFSEhNzd29wZmlUaWNrZXRzQW1vdW50GhoKAmFTEhRjYW1wYWlnblRva2Vuc0Ftb3VudBoZCgJhVBITdG9rZW5zUGVyQWxsb2NhdGlvbhoTCgJhVRINc3dvcFBlclRpY2tldBoYCgJhVhISc3dvcEZyZWV6ZUR1cmF0aW9uGhEKAmFXEgtjbGFpbVBhcmFtcxoZCgJhWBITSGlnaENvbXBldGl0aW9uU2FsZRoeCgJhWRIYaGlnaENvbXBldGl0aW9uQ29taXNzaW9uGiIKAmFaEhxoaWdoQ29tcGV0aXRpb25UaWNrZXRzQW1vdW50GiAKAmFhEhprZXlVc2VyV2lubmVkVGlja2V0c0Ftb3VudBovCgJhYhIpa2V5VXNlcldpbm5lZEhpZ2hDb21wZXRpdGlvblRpY2tldHNBbW91bnQaGAoCYWMSEmtleVVzZXJGcmVlemVUb2tlbhoMCgJhZBIGb3JhY2xlGhAKAmFlEgpnb3Zlcm5hbmNlGhYKAmFmEhBjb21taXNzaW9uV2FsbGV0GhgKAmFnEhJzdGFraW5nVVNETkFkZHJlc3MaCgoCYWgSBFVTRE4aGAoCYWkSEmFkbWluUHViS2V5U3Rha2luZxoaCgJhahIUbWF4QWxsb2NhdGlvbnNBbW91bnQaFwoCYWsSEWFjdGl2ZUxhdW5jaHBhZElkGhEKAmFsEgtnZXRBZG1pblB1YhoRCgJhbRILa2V5QWRtaW5QdWIaDQoCYW4SByRtYXRjaDAaDAoCYW8SBnN0cmluZxoNCgJhcBIHbm90aGluZxoSCgJhcRIMYWRtaW5QdWJLZXkxGhIKAmFyEgxhZG1pblB1YktleTIaEgoCYXMSDGFkbWluUHViS2V5MxoSCgJhdBIMZ2V0QXNzZXRJbmZvGg0KAmF1Egdhc3NldElkGggKAmF2EgJpZBoOCgJhdxIIc3RyaW5nSWQaCgoCYXgSBGluZm8aCwoCYXkSBXdhdmVzGhgKAmF6EhJnZXRMYXVuY2hwYWROZXh0SWQaFAoBYhIPa2V5QWRtaW5QdWJLZXkxGhUKAmJBEg90b2tlblN0ckFzc2V0SWQaFAoCYkISDnRva2VuQXNzZXROYW1lGhMKAmJDEg10b2tlbkRlY2ltYWxzGhEKAmJEEgt0aWNrZXRQcmljZRoZCgJiRRITY29tbWlzc2lvblBlclRpY2tldBoVCgJiRhIPYnV5VGlja2V0QW1vdW50GhwKAmJHEhZhbGxvd2VkQnV5VGlja2V0QW1vdW50GiIKAmJIEhxhbGxvd2VkQnV5UHJpY2VXaXRoQ29taXNzaW9uGgwKAmJJEgZjaGFuZ2UaGgoCYkoSFGZyZWV6ZVRva2VuUGVyVGlja2V0GhMKAmJLEg0kdDAxMjQ5MDEyNTc3GhUKAmJMEg9wbXRBbW91bnRGcmVlemUaFgoCYk0SEHBtdEFzc2V0SWRGcmVlemUaEwoCYk4SDSR0MDEyNTk0MTI2ODUaGQoCYk8SE3BtdEZyZWV6ZVN0ckFzc2V0SWQaGAoCYlASEnBtdEZyZWV6ZUFzc2V0TmFtZRoXCgJiURIRcG10RnJlZXplRGVjaW1hbHMaFgoCYlISEG5lZWRGcmVlemVUb2tlbnMaHgoCYlMSGHVzZXJCb3VnaHRUaWNrZXRzTnVtYmVycxocCgJiVBIWbGFzdEJvdWdodFRpY2tldE51bWJlchoRCgJiVRILYm91Z2h0UmFuZ2UaIQoCYlYSG25ld1VzZXJCb3VnaHRUaWNrZXRzTnVtYmVycxoJCgJiVxIDaW52Gg8KAmJYEgliYXNlRW50cnkaEwoCYlkSDSR0MDE0NzU2MTQ4MzEaEwoCYloSDSR0MDE0ODM2MTQ5ODYaGwoCYmESFWZyZWV6ZUFkZGl0aW9uYWxUb2tlbhoSCgJiYhIMZnJlZXplUGFyYW1zGhQKAmJjEg5sYXVuY2hwYWRJZFN0choRCgJiZBILJHQwNjM3NzY0NTIaDwoCYmUSCXBtdEFtb3VudBoQCgJiZhIKcG10QXNzZXRJZBoRCgJiZxILJHQwNjQ2MTY1MzQaEwoCYmgSDXBtdFN0ckFzc2V0SWQaEgoCYmkSDHBtdEFzc2V0TmFtZRoRCgJiahILcG10RGVjaW1hbHMaGwoCYmsSFWZyZWV6ZUFkZGl0aW9uYWxFbnRyeRoLCgJibBIFcmVmSWQaEQoCYm0SCyR0MDkxNDA5MjE1GhEKAmJuEgskdDA5MjIwOTM3MBoQCgJibxIKYnV5QXNzZXRJZBoTCgJicBINYnV5QXNzZXRTdHJJZBoSCgJicRIMYnV5QXNzZXROYW1lGhYKAmJyEhBidXlBc3NldERlY2ltYWxzGhEKAmJzEgtzdGFrZWRTd29wcxodCgJidBIXYWxsb3dlZFRpY2tldHNBbW91bnRBbGwaGQoCYnUSE2JvdWdodFRpY2tldHNBbW91bnQaGgoCYnYSFGFsbG93ZWRUaWNrZXRzQW1vdW50GhMKAmJ3Eg1mcmVlemVUb2tlbklkGhAKAmJ4Egp0b2tlblByaWNlGhMKAmJ5Eg0kdDAxMTE4MjExMzI2Gg0KAmJ6Egd0b2tlbklkGhQKAWMSD2tleUFkbWluUHViS2V5MhoTCgJjQRINYm91Z2h0VGlja2V0cxoVCgJjQhIPYm91Z2h0SENUaWNrZXRzGhUKAmNDEg91c2VyQ2xhaW1TdGF0dXMaFAoCY0QSDmZpbmFsaXplSGVpZ2h0GhMKAmNFEg0kdDAyNTUxNzI1NjY3GhMKAmNGEg13b25uZWRUaWNrZXRzGhUKAmNHEg93b25uZWRIQ1RpY2tldHMaGgoCY0gSFGF3YWlsYWJsZUFsbG9jYXRpb25zGhgKAmNJEhJhbGxvd2VkQWxsb2NhdGlvbnMaEwoCY0oSDSR0MDI2NTczMjY3MTcaGgoCY0sSFHRyYW5zZmVyVG9rZW5zQW1vdW50GiEKAmNMEhtub3RBbGxvd2VkQWxsb2NhdGlvbnNUb2tlbnMaHAoCY00SFmJ1eUFzc2V0Rm9yQWxsb2NhdGlvbnMaIAoCY04SGmJ1eUFzc2V0Rm9yVW53b25uZWRUaWNrZXRzGiIKAmNPEhxidXlBc3NldEZvckhDVW53b25uZWRUaWNrZXRzGhUKAmNQEg9jbGFpbWVkQnV5VG9rZW4aHAoCY1ESFnJldHVybmVkQnV5QXNzZXRBbW91bnQaFgoCY1ISEHRyYW5zZmVyQnV5QXNzZXQaEwoCY1MSDWNsYWltZWRQYXJhbXMaFAoCY1QSDnRyYW5zZmVyVG9rZW5zGhMKAmNVEg1jbGFpbWVkVG9rZW5zGhIKAmNWEgx1bmxvY2tQZXJpb2QaEQoCY1cSC2Jsb2NrSGVpZ2h0GhIKAmNYEgx1bmxvY2tIZWlnaHQaGAoCY1kSEmFsbG93ZWRTdGFydEFtb3VudBoZCgJjWhITYWxsb3dlZFRva2Vuc0Ftb3VudBoZCgJjYRITdXNlclVzZG5Jbk1hcmtldGluZxoVCgJjYhIPdXNkbkluTWFya2V0aW5nGhcKAmNjEhFib3VnaHRBbGxvY2F0aW9ucxoTCgJjZBINJHQwMTU2NTUxNTc5ORoiCgJjZRIcYWxsb2NhdGlvblByaWNlV2l0aENvbWlzc2lvbhoaCgJjZhIUYnV5QWxsb2NhdGlvbnNBbW91bnQaEwoCY2cSDSR0MDE4MDU3MTgxMzIaEwoCY2gSDSR0MDE4MTM3MTgyODcaGwoCY2kSFWJvdWdodEhDVGlja2V0c0Ftb3VudBoZCgJjahITaGlnaENvbXBldGl0aW9uU2FsZRoTCgJjaxINJHQwMTk0NjAxOTYwNBobCgJjbBIVYnV5UHJpY2VXaXRoQ29taXNzaW9uGg8KAmNtEgl2cmZIZWlnaHQaEAoCY24SCnNlY3JldFdvcmQaDwoCY28SCXNhdmVkSGFzaBoOCgJjcBIIY2FsY0hhc2gaEwoCY3ESDSR0MDIyMjE3MjIzNjcaEgoCY3ISDGNvbW1pc3Npb25IQxoYCgJjcxISdHJhbnNmZXJlZEJ1eUFzc2V0GiEKAmN0Ehtzd29wZmlNZW1iZXJzQnV5QXNzZXRBbW91bnQaHAoCY3USFnN3b3BmaUhDQnV5QXNzZXRBbW91bnQaHAoCY3YSFnN3b3BmaU1lbWJlcnNDb21pc3Npb24aFwoCY3cSEXN3b3BmaUhDQ29taXNzaW9uGiQKAmN4Eh50b3RhbEFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcaGAoCY3kSEm1hcmtldGluZ0NvbWlzc2lvbhoTCgJjehINdW5zdGFrZUFtb3VudBoUCgFkEg9rZXlBZG1pblB1YktleTMaFgoCZGESEGNsYWltU3RhdHVzRW50cnkaFwoCZGISEXVzZXJUb2tlbnNGcmVlemVkGhkKAmRjEhNmcmVlemVUb2tlbkR1cmF0aW9uGhQKAmRkEg5ibG9ja0VuZEhlaWdodBoMCgJkZRIGYW1vdW50GhMKAmRmEg0kdDAzMjkyMzMzMDczGggKAmRnEgJ0eBoMCgJkaBIGdmVyaWZ5GhkKAmRpEhNtdWx0aVNpZ25lZEJ5QWRtaW5zGhgKAmRqEhJhZG1pblB1YktleTFTaWduZWQaGAoCZGsSEmFkbWluUHViS2V5MlNpZ25lZBoYCgJkbBISYWRtaW5QdWJLZXkzU2lnbmVkGhMKAmRtEg1zaWduZWRCeUFkbWluGgkKAmRuEgNkdHgaJgoBZRIha2V5TGF1bmNocGFkRGF0YVRyYW5zYWN0aW9uU3RhdHVzGhcKAWYSEmtleUxhdW5jaHBhZE5leHRJZBoZCgFnEhRrZXlMYXVuY2hwYWRBY3RpdmVJZBoSCgFoEg1rZXlJbml0Q2FsbGVyGg8KAWkSCmtleUFkZHJlc3MaEgoBahINa2V5SW5pdEhlaWdodBoTCgFrEg5rZXlTdGFydEhlaWdodBoWCgFsEhFrZXlGaW5hbGlzZUhlaWdodBoRCgFtEgxrZXlDb21pc3Npb24aDwoBbhIKa2V5QXNzZXRJZBoYCgFvEhNrZXlUb3RhbFRva2VuQW1vdW50Gh8KAXASGmtleVRvdGFsQW1vdW50QnV5QXNzZXRTb2xkGhcKAXESEmtleVRva2Vuc1BlclRpY2tldBoVCgFyEhBrZXlQcmljZVBlclRva2VuGhUKAXMSEGtleVN3b3BQZXJUaWNrZXQaGwoBdBIWa2V5U3dvcGZpVGlja2V0c0Ftb3VudBocCgF1EhdrZXlDYW1wYWlnblRva2Vuc0Ftb3VudBobCgF2EhZrZXlUb2tlbnNQZXJBbGxvY2F0aW9uGhgKAXcSE2tleVRpY2tldExhc3ROdW1iZXIaGAoBeBITa2V5R292ZXJuYW5jZVN0YWtlZBoRCgF5EgxrZXlVc2VyUmVmSWQaEgoBehINa2V5VmVyaWZ5SGFzaAAAAEoAAAAAAWECAAAABmFjdGl2ZQAAAAABYgIAAAALYWRtaW5fcHViXzEAAAAAAWMCAAAAC2FkbWluX3B1Yl8yAAAAAAFkAgAAAAthZG1pbl9wdWJfMwAAAAABZQIAAAAhbGF1bmNocGFkX2RhdGFfdHJhbnNhY3Rpb25fc3RhdHVzAAAAAAFmAgAAABFsYXVuY2hwYWRfbmV4dF9pZAAAAAABZwIAAAATbGF1bmNocGFkX2FjdGl2ZV9pZAAAAAABaAIAAAALaW5pdF9jYWxsZXIAAAAAAWkCAAAACF9hZGRyZXNzAAAAAAFqAgAAAAxfaW5pdF9oZWlnaHQAAAAAAWsCAAAADV9zdGFydF9oZWlnaHQAAAAAAWwCAAAAEF9maW5hbGlzZV9oZWlnaHQAAAAAAW0CAAAACl9jb21pc3Npb24AAAAAAW4CAAAACV9hc3NldF9pZAAAAAABbwIAAAATX3RvdGFsX3Rva2VuX2Ftb3VudAAAAAABcAIAAAAVX3RvdGFsX2J1eV9hc3NldF9zb2xkAAAAAAFxAgAAABJfdG9rZW5zX3Blcl90aWNrZXQAAAAAAXICAAAAEF9wcmljZV9wZXJfdG9rZW4AAAAAAXMCAAAAEF9zd29wX3Blcl90aWNrZXQAAAAAAXQCAAAAF190aWNrZXRzX3N3b3BmaV9tZW1iZXJzAAAAAAF1AgAAABNfdG9rZW5zX2FjY2Vzc19saXN0AAAAAAF2AgAAABZfdG9rZW5zX3Blcl9hbGxvY2F0aW9uAAAAAAF3AgAAABNfdGlja2V0X2xhc3RfbnVtYmVyAAAAAAF4AgAAAAxfU1dPUF9hbW91bnQAAAAAAXkCAAAAB19yZWZfaWQAAAAAAXoCAAAADF92ZXJpZnlfaGFzaAAAAAABQQIAAAAJX2R1cmF0aW9uAAAAAAFCAgAAACdfdG90YWxfcHVyY2hhc2VkX2J1eV9hc3NldF9pbl9tYXJrZXRpbmcAAAAAAUMCAAAAMV90b3RhbF9wdXJjaGFzZWRfYnV5X2Fzc2V0X2luX21hcmtldGluZ19maW5hbGl6ZWQAAAAAAUQCAAAAE190cmFuc2Zlcl9idXlfYXNzZXQAAAAAAUUCAAAAFV9mcmVlemVfc3dvcF9kdXJhdGlvbgAAAAABRgIAAAAYX2ZyZWV6ZV9hZGRpdGlvbmFsX3Rva2VuAAAAAAFHAgAAABBfZnJlZXplX3Rva2VuX2lkAAAAAAFIAgAAABZfZnJlZXplX3Rva2VuX2R1cmF0aW9uAAAAAAFJAgAAABhfZnJlZXplX3Rva2VuX3Blcl90aWNrZXQAAAAAAUoCAAAACl9idXlfdG9rZW4AAAAAAUsCAAAADV9jbGFpbV9wYXJhbXMAAAAAAUwCAAAAG19oaWdoX2NvbXBldGl0aW9uX2NvbWlzc2lvbgAAAAABTQIAAAAWX2hpZ2hfY29tcGV0aXRpb25fc2FsZQAAAAABTgIAAAAkX2hpZ2hfY29tcGV0aXRpb25fdGlja2V0X2xhc3RfbnVtYmVyAAAAAAFPAgAAABlfdGlja2V0c19oaWdoX2NvbXBldGl0aW9uAAAAAAFQAgAAACZfdG90YWxfYnV5X2Fzc2V0X3NvbGRfaGlnaF9jb21wZXRpdGlvbgAAAAABUQIAAAAPX2NsYWltZWRfdG9rZW5zAAAAAAFSAgAAABNfY2xhaW1lZF9idXlfdG9rZW5zAAAAAAFTAgAAAA9fYm91Z2h0X3RpY2tldHMAAAAAAVQCAAAAD190aWNrZXRzX251bWJlcgAAAAABVQIAAAAgX3RpY2tldHNfbnVtYmVyX2hpZ2hfY29tcGV0aXRpb24AAAAAAVYCAAAAIF9ib3VnaHRfdGlja2V0c19oaWdoX2NvbXBldGl0aW9uAAAAAAFXAgAAAB1fYXZhaWxhYmxlX3B1cmNoYXNlX21hcmtldGluZwAAAAABWAIAAAAhX3B1cmNoYXNlZF9idXlfYXNzZXRfaW5fbWFya2V0aW5nAAAAAAFZAgAAABNfYm91Z2h0X2FsbG9jYXRpb25zAAAAAAFaAgAAAA1fY2xhaW1fc3RhdHVzAAAAAAJhYQIAAAAPX3RpY2tldHNfcmVzdWx0AAAAAAJhYgIAAAAgX3RpY2tldHNfcmVzdWx0X2hpZ2hfY29tcGV0aXRpb24AAAAAAmFjAgAAABRfZnJlZXplX3Rva2VuX2Ftb3VudAAAAAACYWQJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVTpRaoekC86rvG6DuYumpJfGpiE4fNiswgAAAAAAmFlCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUqvpp3oH0E1KFyj8uOohRsxnqmBxZ8g0tAAAAAAJhZgkBAAAAB0FkZHJlc3MAAAABAQAAABoBVIwpHfmxeVLLCX5an9rXLwYHFIPsDN0RSQAAAAACYWcJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVS5ic3PR3G6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", "height": 1933242, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EYBgBNefXVwQsMXt6cwju8Ay8GtTgEV3nYFMzqMSH1Ev Next: HoAUJ328oyHQ3XuM2MC7VbyYwAGhMF44Ths5Zx5EY5Gd Diff:
OldNewDifferences
468468 let swopfiHCBuyAssetAmount = valueOrElse(getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSoldHC)), 0)
469469 let swopfiMembersComission = fraction(swopfiMembersBuyAssetAmount, commission, 100)
470470 let swopfiHCComission = fraction(swopfiHCBuyAssetAmount, commissionHC, 100)
471+ let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
472+ let marketingComission = fraction(totalAmountBuyAssetInMarketing, commission, 100)
471473 if ((1 == 1))
472474 then throw("1")
473475 else {
474- let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
475- let marketingComission = fraction(totalAmountBuyAssetInMarketing, commission, 100)
476476 let unstakeAmount = (((((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiMembersComission) + marketingComission) + swopfiHCBuyAssetAmount) + swopfiHCComission)
477477 if ((transferedBuyAsset > (swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing)))
478478 then throw("Can't transfer negative value to project")
508508 else false)
509509 then throw("You can't claim because you don't buy anything")
510510 else {
511- let $t02552525675 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
512- let buyAssetId = $t02552525675._1
513- let buyAssetStrId = $t02552525675._2
514- let buyAssetName = $t02552525675._3
515- let buyAssetDecimals = $t02552525675._4
511+ let $t02551725667 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
512+ let buyAssetId = $t02551725667._1
513+ let buyAssetStrId = $t02551725667._2
514+ let buyAssetName = $t02551725667._3
515+ let buyAssetDecimals = $t02551725667._4
516516 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
517517 let wonnedHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedHighCompetitionTicketsAmount)), 0)
518518 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
521521 let allowedAllocations = min([boughtAllocations, awailableAllocations])
522522 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
523523 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
524- let $t02658126725 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
525- let tokenId = $t02658126725._1
526- let tokenStrAssetId = $t02658126725._2
527- let tokenAssetName = $t02658126725._3
528- let tokenDecimals = $t02658126725._4
524+ let $t02657326717 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
525+ let tokenId = $t02657326717._1
526+ let tokenStrAssetId = $t02657326717._2
527+ let tokenAssetName = $t02657326717._3
528+ let tokenDecimals = $t02657326717._4
529529 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
530530 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
531531 let transferTokensAmount = (((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation)) + (wonnedHCTickets * tokensPerTicket))
622622 @Callable(i)
623623 func transferBuyAsset (launchpadId,amount) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
624624 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
625- let $t03293133081 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
626- let buyAssetId = $t03293133081._1
627- let buyAssetStrId = $t03293133081._2
628- let buyAssetName = $t03293133081._3
629- let buyAssetDecimals = $t03293133081._4
625+ let $t03292333073 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
626+ let buyAssetId = $t03292333073._1
627+ let buyAssetStrId = $t03292333073._2
628+ let buyAssetName = $t03292333073._3
629+ let buyAssetDecimals = $t03292333073._4
630630 [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
631631 }))
632632
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'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
115115
116116 let governance = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
117117
118118 let commissionWallet = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
119119
120120 let stakingUSDNAddress = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
121121
122122 let USDN = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
123123
124124 let adminPubKeyStaking = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
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 func stakedUsdnAmount () = valueOrElse(getInteger(stakingUSDNAddress, ((("rpd_balance_" + toBase58String(USDN)) + "_") + toString(this))), 0)
160160
161161
162162 let active = valueOrElse(getBoolean(this, keyActive), true)
163163
164164 func isActive () = if (active)
165165 then unit
166166 else throw("DApp is inactive at this moment")
167167
168168
169169 func isAdminCall (i) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
170170 then unit
171171 else throw("Only admin can call this function")
172172
173173
174174 func getAssetInfoFromString (assetStr) = if ((assetStr == "WAVES"))
175175 then $Tuple4(unit, "WAVES", "WAVES", 8)
176176 else {
177177 let stringId = assetStr
178178 let id = fromBase58String(assetStr)
179179 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
180180 $Tuple4(id, stringId, info.name, info.decimals)
181181 }
182182
183183
184184 @Callable(i)
185185 func hashingRandom (launchpadId,hash) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), [StringEntry((toString(launchpadId) + keyVerifyHash), hash)]))
186186
187187
188188
189189 @Callable(i)
190190 func initCaller (address) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), [StringEntry(keyInitCaller, address)]))
191191
192192
193193
194194 @Callable(i)
195195 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), "")))
196196 then throw("Only project admin can call init function")
197197 else if ((size(i.payments) != 1))
198198 then throw("One attached payment expected")
199199 else if ((height > startHeight))
200200 then throw("Start height must be greater than blockchain height")
201201 else if (if (freezeAdditionalToken)
202202 then (size(freezeParams) != 3)
203203 else false)
204204 then throw("Freeze params list must have 3 items")
205205 else {
206206 let launchpadId = getLaunchpadNextId()
207207 let launchpadIdStr = toString(launchpadId)
208208 let $t063776452 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
209209 let pmtAmount = $t063776452._1
210210 let pmtAssetId = $t063776452._2
211211 let $t064616534 = getAssetInfo(pmtAssetId)
212212 let pmtStrAssetId = $t064616534._1
213213 let pmtAssetName = $t064616534._2
214214 let pmtDecimals = $t064616534._3
215215 let freezeAdditionalEntry = if (freezeAdditionalToken)
216216 then [BooleanEntry((launchpadIdStr + keyFreezeAdditionalToken), true), StringEntry((launchpadIdStr + keyFreezeTokenId), freezeParams[0]), IntegerEntry((launchpadIdStr + keyFreezeTokenDuration), parseIntValue(freezeParams[1])), IntegerEntry((launchpadIdStr + keyFreezeTokenPerTicket), parseIntValue(freezeParams[2]))]
217217 else nil
218218 ([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)
219219 })
220220
221221
222222
223223 @Callable(i)
224224 func commitSwopfiSale (launchpadId,refId) = valueOrElse(isActive(), {
225225 let $t091409215 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
226226 let pmtAmount = $t091409215._1
227227 let pmtAssetId = $t091409215._2
228228 let $t092209370 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
229229 let buyAssetId = $t092209370._1
230230 let buyAssetStrId = $t092209370._2
231231 let buyAssetName = $t092209370._3
232232 let buyAssetDecimals = $t092209370._4
233233 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
234234 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
235235 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
236236 let allowedTicketsAmount = (allowedTicketsAmountAll - boughtTicketsAmount)
237237 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
238238 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
239239 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
240240 if ((activeLaunchpadId != launchpadId))
241241 then throw("There is no active launchpad or this launchpad is ended")
242242 else if ((startHeight > height))
243243 then throw("Launchpad sale not started yet")
244244 else if ((height > (startHeight + duration)))
245245 then throw("Launchpad sale ended")
246246 else if (if (!(freezeAdditionalToken))
247247 then if ((size(i.payments) != 1))
248248 then true
249249 else (pmtAssetId != buyAssetId)
250250 else false)
251251 then throw((("One attached payment in " + buyAssetName) + " expected"))
252252 else if (if (freezeAdditionalToken)
253253 then if ((size(i.payments) != 2))
254254 then true
255255 else (pmtAssetId != buyAssetId)
256256 else false)
257257 then {
258258 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
259259 throw(((("Two attached payments expected: First in " + buyAssetName) + ", second in ") + freezeTokenId))
260260 }
261261 else if (if ((0 >= allowedTicketsAmountAll))
262262 then true
263263 else (0 >= allowedTicketsAmount))
264264 then throw("Not enought SWOP in staking to buy tickets")
265265 else {
266266 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
267267 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
268268 let $t01118211326 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
269269 let tokenId = $t01118211326._1
270270 let tokenStrAssetId = $t01118211326._2
271271 let tokenAssetName = $t01118211326._3
272272 let tokenDecimals = $t01118211326._4
273273 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
274274 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
275275 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
276276 let allowedBuyTicketAmount = min([buyTicketAmount, allowedTicketsAmount])
277277 let allowedBuyPriceWithComission = (allowedBuyTicketAmount * (ticketPrice + commissionPerTicket))
278278 let change = (pmtAmount - allowedBuyPriceWithComission)
279279 if ((buyTicketAmount == 0))
280280 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
281281 else if ((change != 0))
282282 then throw((((("Wrong payment. To buy " + toString(allowedBuyTicketAmount)) + "tickets you need to pay ") + toString(allowedBuyPriceWithComission)) + buyAssetName))
283283 else {
284284 let freezeAdditionalEntry = if (freezeAdditionalToken)
285285 then {
286286 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
287287 let freezeTokenPerTicket = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenPerTicket))
288288 let $t01249012577 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
289289 let pmtAmountFreeze = $t01249012577._1
290290 let pmtAssetIdFreeze = $t01249012577._2
291291 let $t01259412685 = getAssetInfo(pmtAssetId)
292292 let pmtFreezeStrAssetId = $t01259412685._1
293293 let pmtFreezeAssetName = $t01259412685._2
294294 let pmtFreezeDecimals = $t01259412685._3
295295 let needFreezeTokens = (freezeTokenPerTicket * buyTicketAmount)
296296 if (if ((pmtFreezeStrAssetId != freezeTokenId))
297297 then true
298298 else (needFreezeTokens != pmtAmountFreeze))
299299 then throw((((("You need to add " + toString(needFreezeTokens)) + " ") + pmtFreezeAssetName) + " as a second payment"))
300300 else [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), pmtAmountFreeze)]
301301 }
302302 else nil
303303 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets)), "")
304304 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyTicketLastNumber))
305305 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + allowedBuyTicketAmount)))
306306 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
307307 then ("," + boughtRange)
308308 else ("" + boughtRange)))
309309 let inv = if ((buyAssetId == USDN))
310310 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
311311 else 0
312312 if ((inv == inv))
313313 then {
314314 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)
315315 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
316316 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
317317 else baseEntry
318318 }
319319 else throw("Strict value is not equal to itself.")
320320 }
321321 }
322322 })
323323
324324
325325
326326 @Callable(i)
327327 func commitAccessListSale (launchpadId,refId) = valueOrElse(isActive(), {
328328 let $t01475614831 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
329329 let pmtAmount = $t01475614831._1
330330 let pmtAssetId = $t01475614831._2
331331 let $t01483614986 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
332332 let buyAssetId = $t01483614986._1
333333 let buyAssetStrId = $t01483614986._2
334334 let buyAssetName = $t01483614986._3
335335 let buyAssetDecimals = $t01483614986._4
336336 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing)), 0)
337337 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountBuyAssetInMarketing)), 0)
338338 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
339339 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
340340 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
341341 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
342342 let $t01565515799 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
343343 let tokenId = $t01565515799._1
344344 let tokenStrAssetId = $t01565515799._2
345345 let tokenAssetName = $t01565515799._3
346346 let tokenDecimals = $t01565515799._4
347347 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
348348 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
349349 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
350350 if ((activeLaunchpadId != launchpadId))
351351 then throw("There is no active launchpad or this launchpad is ended")
352352 else if ((startHeight > height))
353353 then throw("Launchpad sale not started yet")
354354 else if ((height > (startHeight + duration)))
355355 then throw("Launchpad sale ended")
356356 else if (if ((size(i.payments) != 1))
357357 then true
358358 else (pmtAssetId != buyAssetId))
359359 then throw((("One attached payment in " + buyAssetName) + " expected"))
360360 else if ((boughtAllocations >= maxAllocationsAmount))
361361 then throw((("You can buy only " + toString(maxAllocationsAmount)) + "allocations"))
362362 else if (if ((allocationPriceWithComission != pmtAmount))
363363 then ((allocationPriceWithComission * 2) != pmtAmount)
364364 else false)
365365 then throw(((("Wrong payment. You can buy 1 or 2 allocations for " + toString(allocationPriceWithComission)) + buyAssetName) + " per allocation"))
366366 else {
367367 let buyAllocationsAmount = (pmtAmount / allocationPriceWithComission)
368368 let inv = if ((buyAssetId == USDN))
369369 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
370370 else 0
371371 if ((inv == inv))
372372 then {
373373 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))]
374374 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
375375 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
376376 else baseEntry
377377 }
378378 else throw("Strict value is not equal to itself.")
379379 }
380380 })
381381
382382
383383
384384 @Callable(i)
385385 func commitHighCompetitionSale (launchpadId,refId) = valueOrElse(isActive(), {
386386 let $t01805718132 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
387387 let pmtAmount = $t01805718132._1
388388 let pmtAssetId = $t01805718132._2
389389 let $t01813718287 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
390390 let buyAssetId = $t01813718287._1
391391 let buyAssetStrId = $t01813718287._2
392392 let buyAssetName = $t01813718287._3
393393 let buyAssetDecimals = $t01813718287._4
394394 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
395395 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
396396 let boughtHCTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
397397 let highCompetitionSale = valueOrElse(getBoolean(this, (toString(launchpadId) + keyHighCompetitionSale)), false)
398398 if ((activeLaunchpadId != launchpadId))
399399 then throw("There is no active launchpad or this launchpad is ended")
400400 else if (!(highCompetitionSale))
401401 then throw("There is no high competition sale for this launchpad")
402402 else if ((startHeight > height))
403403 then throw("Launchpad sale not started yet")
404404 else if ((height > (startHeight + duration)))
405405 then throw("Launchpad sale ended")
406406 else if (if ((size(i.payments) != 1))
407407 then true
408408 else (pmtAssetId != buyAssetId))
409409 then throw((("One attached payment in " + buyAssetName) + " expected"))
410410 else {
411411 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
412412 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
413413 let $t01946019604 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
414414 let tokenId = $t01946019604._1
415415 let tokenStrAssetId = $t01946019604._2
416416 let tokenAssetName = $t01946019604._3
417417 let tokenDecimals = $t01946019604._4
418418 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
419419 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission)), 100)
420420 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
421421 let buyPriceWithComission = (buyTicketAmount * (ticketPrice + commissionPerTicket))
422422 let change = (pmtAmount - buyPriceWithComission)
423423 if ((buyTicketAmount == 0))
424424 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
425425 else if ((change != 0))
426426 then throw((((("Wrong payment. To buy " + toString(buyTicketAmount)) + "tickets you need to pay ") + toString(buyPriceWithComission)) + buyAssetName))
427427 else {
428428 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCTickets)), "")
429429 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyHCTicketLastNumber))
430430 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + buyTicketAmount)))
431431 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
432432 then ("," + boughtRange)
433433 else ("" + boughtRange)))
434434 let inv = if ((buyAssetId == USDN))
435435 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
436436 else 0
437437 if ((inv == inv))
438438 then {
439439 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)]
440440 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
441441 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
442442 else baseEntry
443443 }
444444 else throw("Strict value is not equal to itself.")
445445 }
446446 }
447447 })
448448
449449
450450
451451 @Callable(i)
452452 func finalise (launchpadId,vrfHeight,secretWord) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
453453 let savedHash = getStringValue(this, (toString(launchpadId) + keyVerifyHash))
454454 let calcHash = toBase58String(sha256((toBytes(vrfHeight) + toBytes(secretWord))))
455455 if ((calcHash != savedHash))
456456 then throw("vrf Height hash not matching")
457457 else {
458458 let $t02221722367 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
459459 let buyAssetId = $t02221722367._1
460460 let buyAssetStrId = $t02221722367._2
461461 let buyAssetName = $t02221722367._3
462462 let buyAssetDecimals = $t02221722367._4
463463 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
464464 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
465465 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
466466 let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
467467 let swopfiMembersBuyAssetAmount = getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSold))
468468 let swopfiHCBuyAssetAmount = valueOrElse(getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSoldHC)), 0)
469469 let swopfiMembersComission = fraction(swopfiMembersBuyAssetAmount, commission, 100)
470470 let swopfiHCComission = fraction(swopfiHCBuyAssetAmount, commissionHC, 100)
471+ let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
472+ let marketingComission = fraction(totalAmountBuyAssetInMarketing, commission, 100)
471473 if ((1 == 1))
472474 then throw("1")
473475 else {
474- let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
475- let marketingComission = fraction(totalAmountBuyAssetInMarketing, commission, 100)
476476 let unstakeAmount = (((((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiMembersComission) + marketingComission) + swopfiHCBuyAssetAmount) + swopfiHCComission)
477477 if ((transferedBuyAsset > (swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing)))
478478 then throw("Can't transfer negative value to project")
479479 else {
480480 let inv = if ((buyAssetId == USDN))
481481 then invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toBase58String(USDN)], nil)
482482 else 0
483483 if ((inv == inv))
484484 then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, (((swopfiMembersBuyAssetAmount + swopfiHCBuyAssetAmount) + totalAmountBuyAssetInMarketing) - transferedBuyAsset), buyAssetId), ScriptTransfer(commissionWallet, ((swopfiMembersComission + marketingComission) + swopfiHCComission), buyAssetId)]
485485 else throw("Strict value is not equal to itself.")
486486 }
487487 }
488488 }
489489 }))
490490
491491
492492
493493 @Callable(i)
494494 func claim (launchpadId) = valueOrElse(isActive(), {
495495 let boughtTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
496496 let boughtHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
497497 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
498498 let userClaimStatus = valueOrElse(getBoolean(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus)), false)
499499 let finalizeHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)), 0)
500500 if ((finalizeHeight == 0))
501501 then throw("You can't claim because results are not finalized")
502502 else if (userClaimStatus)
503503 then throw("You are already claimed")
504504 else if (if (if ((boughtTickets == 0))
505505 then (boughtAllocations == 0)
506506 else false)
507507 then (boughtHCTickets == 0)
508508 else false)
509509 then throw("You can't claim because you don't buy anything")
510510 else {
511- let $t02552525675 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
512- let buyAssetId = $t02552525675._1
513- let buyAssetStrId = $t02552525675._2
514- let buyAssetName = $t02552525675._3
515- let buyAssetDecimals = $t02552525675._4
511+ let $t02551725667 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
512+ let buyAssetId = $t02551725667._1
513+ let buyAssetStrId = $t02551725667._2
514+ let buyAssetName = $t02551725667._3
515+ let buyAssetDecimals = $t02551725667._4
516516 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
517517 let wonnedHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedHighCompetitionTicketsAmount)), 0)
518518 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
519519 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
520520 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
521521 let allowedAllocations = min([boughtAllocations, awailableAllocations])
522522 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
523523 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
524- let $t02658126725 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
525- let tokenId = $t02658126725._1
526- let tokenStrAssetId = $t02658126725._2
527- let tokenAssetName = $t02658126725._3
528- let tokenDecimals = $t02658126725._4
524+ let $t02657326717 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
525+ let tokenId = $t02657326717._1
526+ let tokenStrAssetId = $t02657326717._2
527+ let tokenAssetName = $t02657326717._3
528+ let tokenDecimals = $t02657326717._4
529529 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
530530 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
531531 let transferTokensAmount = (((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation)) + (wonnedHCTickets * tokensPerTicket))
532532 let notAllowedAllocationsTokens = ((boughtAllocations - allowedAllocations) * tokensPerAllocation)
533533 let buyAssetForAllocations = fraction(fraction(notAllowedAllocationsTokens, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
534534 let buyAssetForUnwonnedTickets = fraction(((boughtTickets - wonnedTickets) * ticketPrice), (100 + commission), 100)
535535 let buyAssetForHCUnwonnedTickets = fraction(((boughtHCTickets - wonnedHCTickets) * ticketPrice), (100 + commissionHC), 100)
536536 let claimedBuyToken = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedBuyTokens)), 0)
537537 if (if (if ((0 > buyAssetForAllocations))
538538 then true
539539 else (0 > buyAssetForUnwonnedTickets))
540540 then true
541541 else (0 > buyAssetForHCUnwonnedTickets))
542542 then throw("Error with allowed allocation param or wonned tickets param please contact support")
543543 else {
544544 let returnedBuyAssetAmount = (((buyAssetForUnwonnedTickets + buyAssetForHCUnwonnedTickets) + buyAssetForAllocations) - claimedBuyToken)
545545 let transferBuyAsset = if ((returnedBuyAssetAmount > 0))
546546 then [ScriptTransfer(i.caller, returnedBuyAssetAmount, buyAssetId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedBuyTokens), returnedBuyAssetAmount)]
547547 else nil
548548 let inv = if (if ((returnedBuyAssetAmount > 0))
549549 then (buyAssetId == USDN)
550550 else false)
551551 then invoke(stakingUSDNAddress, "unlockNeutrino", [returnedBuyAssetAmount, toBase58String(USDN)], nil)
552552 else 0
553553 if ((inv == inv))
554554 then {
555555 let claimedParams = split(valueOrElse(getString(this, (toString(launchpadId) + keyClaimParams)), ""), ",")
556556 if (if ((size(claimedParams) == 0))
557557 then true
558558 else (claimedParams[0] == "claimAll"))
559559 then {
560560 let transferTokens = if ((transferTokensAmount > 0))
561561 then [ScriptTransfer(i.caller, transferTokensAmount, tokenId)]
562562 else nil
563563 (([BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens), transferTokensAmount)] ++ transferTokens) ++ transferBuyAsset)
564564 }
565565 else if ((claimedParams[0] == "claimPeriod"))
566566 then {
567567 let claimedTokens = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens)), 0)
568568 let unlockPeriod = value(parseInt(claimedParams[2]))
569569 let blockHeight = (value(parseInt(claimedParams[3])) + finalizeHeight)
570570 let unlockHeight = (unlockPeriod + blockHeight)
571571 let allowedStartAmount = fraction(transferTokensAmount, value(parseInt(claimedParams[1])), 100)
572572 let allowedTokensAmount = (allowedStartAmount + (if ((height > blockHeight))
573573 then (fraction((transferTokensAmount - allowedStartAmount), (min([height, unlockHeight]) - blockHeight), unlockPeriod) - claimedTokens)
574574 else (0 - claimedTokens)))
575575 let claimStatusEntry = if ((transferTokensAmount >= (claimedTokens + allowedTokensAmount)))
576576 then [BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true)]
577577 else nil
578578 if (if ((allowedTokensAmount > 0))
579579 then true
580580 else (returnedBuyAssetAmount > 0))
581581 then {
582582 let transferTokens = if ((allowedTokensAmount > 0))
583583 then [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens), (claimedTokens + allowedTokensAmount)), ScriptTransfer(i.caller, allowedTokensAmount, tokenId)]
584584 else nil
585585 (transferBuyAsset ++ transferTokens)
586586 }
587587 else throw("Nothing to claim")
588588 }
589589 else throw("Unknown claim function")
590590 }
591591 else throw("Strict value is not equal to itself.")
592592 }
593593 }
594594 })
595595
596596
597597
598598 @Callable(i)
599599 func claimFreezeToken (launchpadId) = valueOrElse(isActive(), {
600600 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
601601 if (!(isDefined(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)))))
602602 then throw("You can't claim because results are not finalized")
603603 else if (!(freezeAdditionalToken))
604604 then throw("There are no additional token freezing for this launchpad")
605605 else {
606606 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyFreezeTokenId)))
607607 let userTokensFreezed = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken)), 0)
608608 let startHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyStartHeight)), 0)
609609 let duration = valueOrElse(getInteger(this, (toString(launchpadId) + keyDuration)), 0)
610610 let freezeTokenDuration = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenDuration))
611611 let blockEndHeight = ((startHeight + duration) + freezeTokenDuration)
612612 if ((userTokensFreezed == 0))
613613 then throw("You are already claimed your tokens or not paid anything")
614614 else if ((blockEndHeight > height))
615615 then throw(("Your tokens freezed teel " + toString(blockEndHeight)))
616616 else [ScriptTransfer(i.caller, userTokensFreezed, tokenId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), 0)]
617617 }
618618 })
619619
620620
621621
622622 @Callable(i)
623623 func transferBuyAsset (launchpadId,amount) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
624624 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
625- let $t03293133081 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
626- let buyAssetId = $t03293133081._1
627- let buyAssetStrId = $t03293133081._2
628- let buyAssetName = $t03293133081._3
629- let buyAssetDecimals = $t03293133081._4
625+ let $t03292333073 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
626+ let buyAssetId = $t03292333073._1
627+ let buyAssetStrId = $t03292333073._2
628+ let buyAssetName = $t03292333073._3
629+ let buyAssetDecimals = $t03292333073._4
630630 [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
631631 }))
632632
633633
634634
635635 @Callable(i)
636636 func shutdown () = valueOrElse(isAdminCall(i), if (!(active))
637637 then throw("DApp already inactive")
638638 else [BooleanEntry(keyActive, false)])
639639
640640
641641
642642 @Callable(i)
643643 func activate () = valueOrElse(isAdminCall(i), if (active)
644644 then throw("DApp already active")
645645 else [BooleanEntry(keyActive, true)])
646646
647647
648648 @Verifier(tx)
649649 func verify () = {
650650 let multiSignedByAdmins = {
651651 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
652652 then 1
653653 else 0
654654 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
655655 then 1
656656 else 0
657657 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
658658 then 1
659659 else 0
660660 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
661661 }
662662 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
663663 then true
664664 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
665665 then true
666666 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
667667 then true
668668 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKeyStaking)
669669 match tx {
670670 case dtx: DataTransaction =>
671671 if (valueOrElse(getBoolean(oracle, keyLaunchpadDataTransactionStatus), false))
672672 then signedByAdmin
673673 else false
674674 case _ =>
675675 multiSignedByAdmins
676676 }
677677 }
678678

github/deemru/w8io/026f985 
86.88 ms