tx · 2SsVXTiS9cvX4xLSEdc1ZEcYJhQ1erXfQWxS9WRfkGfa

3MzDGFvPnXVbA4wCacqcVnfVJPwG952KVAg:  -0.01400000 Waves

2022.02.21 12:55 [1933261] smart account 3MzDGFvPnXVbA4wCacqcVnfVJPwG952KVAg > SELF 0.00000000 Waves

{ "type": 13, "id": "2SsVXTiS9cvX4xLSEdc1ZEcYJhQ1erXfQWxS9WRfkGfa", "fee": 1400000, "feeAssetId": null, "timestamp": 1645437362697, "version": 2, "chainId": 84, "sender": "3MzDGFvPnXVbA4wCacqcVnfVJPwG952KVAg", "senderPublicKey": "CViCXhHrygDDAtVc1uFczxe6ANj9tBz5PGQDS1yWZqgy", "proofs": [ "JDdGnDsQYYZVdzbok7EoDEdjh62M7YbCFFEMz5yjwe37iJciRe2EiJxMNotjcufP71sfdWYbiuTknoU7qLVmZRJ", "4fxEhxqN4tBQwZsXeVBXgAV29QxB5cWtJKXZgBYXCJRbC1boe4aJkPoqQRQDZoh1QsnGuzK9SwnCNVxQNvzGzBVA" ], "script": "base64:AAIFAAAAAAAAFLQIAhIECgIBCBIDCgEIEhQKEggBAQgBAQEBAQEBARgEAQEEGBIECgIBCBIECgIBCBIECgIBCBIFCgMBAQgSAwoBARIDCgEBEgQKAgEBEgASABoQCgFBEgtrZXlEdXJhdGlvbhohCgFCEhxrZXlBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGioKAUMSJWtleUFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmdGaW5hbGl6ZWQaGAoBRBITa2V5VHJhbnNmZXJCdXlBc3NldBoZCgFFEhRrZXlGcmVlelN3b3BEdXJhdGlvbhodCgFGEhhrZXlGcmVlemVBZGRpdGlvbmFsVG9rZW4aFQoBRxIQa2V5RnJlZXplVG9rZW5JZBobCgFIEhZrZXlGcmVlemVUb2tlbkR1cmF0aW9uGhwKAUkSF2tleUZyZWV6ZVRva2VuUGVyVGlja2V0GhAKAUoSC2tleUJ1eVRva2VuGhMKAUsSDmtleUNsYWltUGFyYW1zGiAKAUwSG2tleUhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbhobCgFNEhZrZXlIaWdoQ29tcGV0aXRpb25TYWxlGhoKAU4SFWtleUhDVGlja2V0TGFzdE51bWJlchodCgFPEhhrZXlIaWdoQ29tcGV0aXRpb25BbW91bnQaIQoBUBIca2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGRIQxoZCgFREhRrZXlVc2VyQ2xhaW1lZFRva2VucxocCgFSEhdrZXlVc2VyQ2xhaW1lZEJ1eVRva2VucxofCgFTEhprZXlVc2VyQm91Z2h0VGlja2V0c0Ftb3VudBoTCgFUEg5rZXlVc2VyVGlja2V0cxoVCgFVEhBrZXlVc2VySENUaWNrZXRzGiEKAVYSHGtleVVzZXJIQ0JvdWdodFRpY2tldHNBbW91bnQaIAoBVxIba2V5VXNlckF2YWlsYWJsZUFsbG9jYXRpb25zGiUKAVgSIGtleVVzZXJBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGh0KAVkSGGtleVVzZXJCb3VnaHRBbGxvY2F0aW9ucxoXCgFaEhJrZXlVc2VyQ2xhaW1TdGF0dXMaDgoBYRIJa2V5QWN0aXZlGhYKAmFBEhBzdGFrZWRVc2RuQW1vdW50GgwKAmFCEgZhY3RpdmUaDgoCYUMSCGlzQWN0aXZlGhEKAmFEEgtpc0FkbWluQ2FsbBoHCgJhRRIBaRocCgJhRhIWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZxoOCgJhRxIIYXNzZXRTdHIaEQoCYUgSC2xhdW5jaHBhZElkGgoKAmFJEgRoYXNoGg0KAmFKEgdhZGRyZXNzGhQKAmFLEg5wcm9qZWN0QWRkcmVzcxoRCgJhTBILc3RhcnRIZWlnaHQaDgoCYU0SCGR1cmF0aW9uGg4KAmFOEghidXlUb2tlbhoQCgJhTxIKY29tbWlzc2lvbhoVCgJhUBIPdG9rZW5zUGVyVGlja2V0GhMKAmFREg1wcmljZVBlclRva2VuGhkKAmFSEhNzd29wZmlUaWNrZXRzQW1vdW50GhoKAmFTEhRjYW1wYWlnblRva2Vuc0Ftb3VudBoZCgJhVBITdG9rZW5zUGVyQWxsb2NhdGlvbhoTCgJhVRINc3dvcFBlclRpY2tldBoYCgJhVhISc3dvcEZyZWV6ZUR1cmF0aW9uGhEKAmFXEgtjbGFpbVBhcmFtcxoZCgJhWBITSGlnaENvbXBldGl0aW9uU2FsZRoeCgJhWRIYaGlnaENvbXBldGl0aW9uQ29taXNzaW9uGiIKAmFaEhxoaWdoQ29tcGV0aXRpb25UaWNrZXRzQW1vdW50GiAKAmFhEhprZXlVc2VyV2lubmVkVGlja2V0c0Ftb3VudBovCgJhYhIpa2V5VXNlcldpbm5lZEhpZ2hDb21wZXRpdGlvblRpY2tldHNBbW91bnQaGAoCYWMSEmtleVVzZXJGcmVlemVUb2tlbhoMCgJhZBIGb3JhY2xlGhAKAmFlEgpnb3Zlcm5hbmNlGhYKAmFmEhBjb21taXNzaW9uV2FsbGV0GhgKAmFnEhJzdGFraW5nVVNETkFkZHJlc3MaCgoCYWgSBFVTRE4aGAoCYWkSEmFkbWluUHViS2V5U3Rha2luZxoaCgJhahIUbWF4QWxsb2NhdGlvbnNBbW91bnQaFwoCYWsSEWFjdGl2ZUxhdW5jaHBhZElkGhEKAmFsEgtnZXRBZG1pblB1YhoRCgJhbRILa2V5QWRtaW5QdWIaDQoCYW4SByRtYXRjaDAaDAoCYW8SBnN0cmluZxoNCgJhcBIHbm90aGluZxoSCgJhcRIMYWRtaW5QdWJLZXkxGhIKAmFyEgxhZG1pblB1YktleTIaEgoCYXMSDGFkbWluUHViS2V5MxoSCgJhdBIMZ2V0QXNzZXRJbmZvGg0KAmF1Egdhc3NldElkGggKAmF2EgJpZBoOCgJhdxIIc3RyaW5nSWQaCgoCYXgSBGluZm8aCwoCYXkSBXdhdmVzGhgKAmF6EhJnZXRMYXVuY2hwYWROZXh0SWQaFAoBYhIPa2V5QWRtaW5QdWJLZXkxGhUKAmJBEg90b2tlblN0ckFzc2V0SWQaFAoCYkISDnRva2VuQXNzZXROYW1lGhMKAmJDEg10b2tlbkRlY2ltYWxzGhEKAmJEEgt0aWNrZXRQcmljZRoZCgJiRRITY29tbWlzc2lvblBlclRpY2tldBoVCgJiRhIPYnV5VGlja2V0QW1vdW50GhwKAmJHEhZhbGxvd2VkQnV5VGlja2V0QW1vdW50GiIKAmJIEhxhbGxvd2VkQnV5UHJpY2VXaXRoQ29taXNzaW9uGgwKAmJJEgZjaGFuZ2UaGgoCYkoSFGZyZWV6ZVRva2VuUGVyVGlja2V0GhMKAmJLEg0kdDAxMjQ5MDEyNTc3GhUKAmJMEg9wbXRBbW91bnRGcmVlemUaFgoCYk0SEHBtdEFzc2V0SWRGcmVlemUaEwoCYk4SDSR0MDEyNTk0MTI2ODUaGQoCYk8SE3BtdEZyZWV6ZVN0ckFzc2V0SWQaGAoCYlASEnBtdEZyZWV6ZUFzc2V0TmFtZRoXCgJiURIRcG10RnJlZXplRGVjaW1hbHMaFgoCYlISEG5lZWRGcmVlemVUb2tlbnMaHgoCYlMSGHVzZXJCb3VnaHRUaWNrZXRzTnVtYmVycxocCgJiVBIWbGFzdEJvdWdodFRpY2tldE51bWJlchoRCgJiVRILYm91Z2h0UmFuZ2UaIQoCYlYSG25ld1VzZXJCb3VnaHRUaWNrZXRzTnVtYmVycxoJCgJiVxIDaW52Gg8KAmJYEgliYXNlRW50cnkaEwoCYlkSDSR0MDE0NzU2MTQ4MzEaEwoCYloSDSR0MDE0ODM2MTQ5ODYaGwoCYmESFWZyZWV6ZUFkZGl0aW9uYWxUb2tlbhoSCgJiYhIMZnJlZXplUGFyYW1zGhQKAmJjEg5sYXVuY2hwYWRJZFN0choRCgJiZBILJHQwNjM3NzY0NTIaDwoCYmUSCXBtdEFtb3VudBoQCgJiZhIKcG10QXNzZXRJZBoRCgJiZxILJHQwNjQ2MTY1MzQaEwoCYmgSDXBtdFN0ckFzc2V0SWQaEgoCYmkSDHBtdEFzc2V0TmFtZRoRCgJiahILcG10RGVjaW1hbHMaGwoCYmsSFWZyZWV6ZUFkZGl0aW9uYWxFbnRyeRoLCgJibBIFcmVmSWQaEQoCYm0SCyR0MDkxNDA5MjE1GhEKAmJuEgskdDA5MjIwOTM3MBoQCgJibxIKYnV5QXNzZXRJZBoTCgJicBINYnV5QXNzZXRTdHJJZBoSCgJicRIMYnV5QXNzZXROYW1lGhYKAmJyEhBidXlBc3NldERlY2ltYWxzGhEKAmJzEgtzdGFrZWRTd29wcxodCgJidBIXYWxsb3dlZFRpY2tldHNBbW91bnRBbGwaGQoCYnUSE2JvdWdodFRpY2tldHNBbW91bnQaGgoCYnYSFGFsbG93ZWRUaWNrZXRzQW1vdW50GhMKAmJ3Eg1mcmVlemVUb2tlbklkGhAKAmJ4Egp0b2tlblByaWNlGhMKAmJ5Eg0kdDAxMTE4MjExMzI2Gg0KAmJ6Egd0b2tlbklkGhQKAWMSD2tleUFkbWluUHViS2V5MhoTCgJjQRINYm91Z2h0VGlja2V0cxoVCgJjQhIPYm91Z2h0SENUaWNrZXRzGhUKAmNDEg91c2VyQ2xhaW1TdGF0dXMaFAoCY0QSDmZpbmFsaXplSGVpZ2h0GhMKAmNFEg0kdDAyNTUwMzI1NjUzGhMKAmNGEg13b25uZWRUaWNrZXRzGhUKAmNHEg93b25uZWRIQ1RpY2tldHMaGgoCY0gSFGF3YWlsYWJsZUFsbG9jYXRpb25zGhgKAmNJEhJhbGxvd2VkQWxsb2NhdGlvbnMaEwoCY0oSDSR0MDI2NTU5MjY3MDMaGgoCY0sSFHRyYW5zZmVyVG9rZW5zQW1vdW50GiEKAmNMEhtub3RBbGxvd2VkQWxsb2NhdGlvbnNUb2tlbnMaHAoCY00SFmJ1eUFzc2V0Rm9yQWxsb2NhdGlvbnMaIAoCY04SGmJ1eUFzc2V0Rm9yVW53b25uZWRUaWNrZXRzGiIKAmNPEhxidXlBc3NldEZvckhDVW53b25uZWRUaWNrZXRzGhUKAmNQEg9jbGFpbWVkQnV5VG9rZW4aHAoCY1ESFnJldHVybmVkQnV5QXNzZXRBbW91bnQaFgoCY1ISEHRyYW5zZmVyQnV5QXNzZXQaEwoCY1MSDWNsYWltZWRQYXJhbXMaFAoCY1QSDnRyYW5zZmVyVG9rZW5zGhMKAmNVEg1jbGFpbWVkVG9rZW5zGhIKAmNWEgx1bmxvY2tQZXJpb2QaEQoCY1cSC2Jsb2NrSGVpZ2h0GhIKAmNYEgx1bmxvY2tIZWlnaHQaGAoCY1kSEmFsbG93ZWRTdGFydEFtb3VudBoZCgJjWhITYWxsb3dlZFRva2Vuc0Ftb3VudBoZCgJjYRITdXNlclVzZG5Jbk1hcmtldGluZxoVCgJjYhIPdXNkbkluTWFya2V0aW5nGhcKAmNjEhFib3VnaHRBbGxvY2F0aW9ucxoTCgJjZBINJHQwMTU2NTUxNTc5ORoiCgJjZRIcYWxsb2NhdGlvblByaWNlV2l0aENvbWlzc2lvbhoaCgJjZhIUYnV5QWxsb2NhdGlvbnNBbW91bnQaEwoCY2cSDSR0MDE4MDU3MTgxMzIaEwoCY2gSDSR0MDE4MTM3MTgyODcaGwoCY2kSFWJvdWdodEhDVGlja2V0c0Ftb3VudBoZCgJjahITaGlnaENvbXBldGl0aW9uU2FsZRoTCgJjaxINJHQwMTk0NjAxOTYwNBobCgJjbBIVYnV5UHJpY2VXaXRoQ29taXNzaW9uGg8KAmNtEgl2cmZIZWlnaHQaEAoCY24SCnNlY3JldFdvcmQaDwoCY28SCXNhdmVkSGFzaBoOCgJjcBIIY2FsY0hhc2gaEwoCY3ESDSR0MDIyMjE3MjIzNjcaEgoCY3ISDGNvbW1pc3Npb25IQxoYCgJjcxISdHJhbnNmZXJlZEJ1eUFzc2V0GiEKAmN0Ehtzd29wZmlNZW1iZXJzQnV5QXNzZXRBbW91bnQaHAoCY3USFnN3b3BmaUhDQnV5QXNzZXRBbW91bnQaHAoCY3YSFnN3b3BmaU1lbWJlcnNDb21pc3Npb24aFwoCY3cSEXN3b3BmaUhDQ29taXNzaW9uGiQKAmN4Eh50b3RhbEFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcaGAoCY3kSEm1hcmtldGluZ0NvbWlzc2lvbhoTCgJjehINdW5zdGFrZUFtb3VudBoUCgFkEg9rZXlBZG1pblB1YktleTMaFgoCZGESEGNsYWltU3RhdHVzRW50cnkaFwoCZGISEXVzZXJUb2tlbnNGcmVlemVkGhkKAmRjEhNmcmVlemVUb2tlbkR1cmF0aW9uGhQKAmRkEg5ibG9ja0VuZEhlaWdodBoMCgJkZRIGYW1vdW50GhMKAmRmEg0kdDAzMjkwOTMzMDU5GggKAmRnEgJ0eBoMCgJkaBIGdmVyaWZ5GhkKAmRpEhNtdWx0aVNpZ25lZEJ5QWRtaW5zGhgKAmRqEhJhZG1pblB1YktleTFTaWduZWQaGAoCZGsSEmFkbWluUHViS2V5MlNpZ25lZBoYCgJkbBISYWRtaW5QdWJLZXkzU2lnbmVkGhMKAmRtEg1zaWduZWRCeUFkbWluGgkKAmRuEgNkdHgaJgoBZRIha2V5TGF1bmNocGFkRGF0YVRyYW5zYWN0aW9uU3RhdHVzGhcKAWYSEmtleUxhdW5jaHBhZE5leHRJZBoZCgFnEhRrZXlMYXVuY2hwYWRBY3RpdmVJZBoSCgFoEg1rZXlJbml0Q2FsbGVyGg8KAWkSCmtleUFkZHJlc3MaEgoBahINa2V5SW5pdEhlaWdodBoTCgFrEg5rZXlTdGFydEhlaWdodBoWCgFsEhFrZXlGaW5hbGlzZUhlaWdodBoRCgFtEgxrZXlDb21pc3Npb24aDwoBbhIKa2V5QXNzZXRJZBoYCgFvEhNrZXlUb3RhbFRva2VuQW1vdW50Gh8KAXASGmtleVRvdGFsQW1vdW50QnV5QXNzZXRTb2xkGhcKAXESEmtleVRva2Vuc1BlclRpY2tldBoVCgFyEhBrZXlQcmljZVBlclRva2VuGhUKAXMSEGtleVN3b3BQZXJUaWNrZXQaGwoBdBIWa2V5U3dvcGZpVGlja2V0c0Ftb3VudBocCgF1EhdrZXlDYW1wYWlnblRva2Vuc0Ftb3VudBobCgF2EhZrZXlUb2tlbnNQZXJBbGxvY2F0aW9uGhgKAXcSE2tleVRpY2tldExhc3ROdW1iZXIaGAoBeBITa2V5R292ZXJuYW5jZVN0YWtlZBoRCgF5EgxrZXlVc2VyUmVmSWQaEgoBehINa2V5VmVyaWZ5SGFzaAAAAEoAAAAAAWECAAAABmFjdGl2ZQAAAAABYgIAAAALYWRtaW5fcHViXzEAAAAAAWMCAAAAC2FkbWluX3B1Yl8yAAAAAAFkAgAAAAthZG1pbl9wdWJfMwAAAAABZQIAAAAhbGF1bmNocGFkX2RhdGFfdHJhbnNhY3Rpb25fc3RhdHVzAAAAAAFmAgAAABFsYXVuY2hwYWRfbmV4dF9pZAAAAAABZwIAAAATbGF1bmNocGFkX2FjdGl2ZV9pZAAAAAABaAIAAAALaW5pdF9jYWxsZXIAAAAAAWkCAAAACF9hZGRyZXNzAAAAAAFqAgAAAAxfaW5pdF9oZWlnaHQAAAAAAWsCAAAADV9zdGFydF9oZWlnaHQAAAAAAWwCAAAAEF9maW5hbGlzZV9oZWlnaHQAAAAAAW0CAAAACl9jb21pc3Npb24AAAAAAW4CAAAACV9hc3NldF9pZAAAAAABbwIAAAATX3RvdGFsX3Rva2VuX2Ftb3VudAAAAAABcAIAAAAVX3RvdGFsX2J1eV9hc3NldF9zb2xkAAAAAAFxAgAAABJfdG9rZW5zX3Blcl90aWNrZXQAAAAAAXICAAAAEF9wcmljZV9wZXJfdG9rZW4AAAAAAXMCAAAAEF9zd29wX3Blcl90aWNrZXQAAAAAAXQCAAAAF190aWNrZXRzX3N3b3BmaV9tZW1iZXJzAAAAAAF1AgAAABNfdG9rZW5zX2FjY2Vzc19saXN0AAAAAAF2AgAAABZfdG9rZW5zX3Blcl9hbGxvY2F0aW9uAAAAAAF3AgAAABNfdGlja2V0X2xhc3RfbnVtYmVyAAAAAAF4AgAAAAxfU1dPUF9hbW91bnQAAAAAAXkCAAAAB19yZWZfaWQAAAAAAXoCAAAADF92ZXJpZnlfaGFzaAAAAAABQQIAAAAJX2R1cmF0aW9uAAAAAAFCAgAAACdfdG90YWxfcHVyY2hhc2VkX2J1eV9hc3NldF9pbl9tYXJrZXRpbmcAAAAAAUMCAAAAMV90b3RhbF9wdXJjaGFzZWRfYnV5X2Fzc2V0X2luX21hcmtldGluZ19maW5hbGl6ZWQAAAAAAUQCAAAAE190cmFuc2Zlcl9idXlfYXNzZXQAAAAAAUUCAAAAFV9mcmVlemVfc3dvcF9kdXJhdGlvbgAAAAABRgIAAAAYX2ZyZWV6ZV9hZGRpdGlvbmFsX3Rva2VuAAAAAAFHAgAAABBfZnJlZXplX3Rva2VuX2lkAAAAAAFIAgAAABZfZnJlZXplX3Rva2VuX2R1cmF0aW9uAAAAAAFJAgAAABhfZnJlZXplX3Rva2VuX3Blcl90aWNrZXQAAAAAAUoCAAAACl9idXlfdG9rZW4AAAAAAUsCAAAADV9jbGFpbV9wYXJhbXMAAAAAAUwCAAAAG19oaWdoX2NvbXBldGl0aW9uX2NvbWlzc2lvbgAAAAABTQIAAAAWX2hpZ2hfY29tcGV0aXRpb25fc2FsZQAAAAABTgIAAAAkX2hpZ2hfY29tcGV0aXRpb25fdGlja2V0X2xhc3RfbnVtYmVyAAAAAAFPAgAAABlfdGlja2V0c19oaWdoX2NvbXBldGl0aW9uAAAAAAFQAgAAACZfdG90YWxfYnV5X2Fzc2V0X3NvbGRfaGlnaF9jb21wZXRpdGlvbgAAAAABUQIAAAAPX2NsYWltZWRfdG9rZW5zAAAAAAFSAgAAABNfY2xhaW1lZF9idXlfdG9rZW5zAAAAAAFTAgAAAA9fYm91Z2h0X3RpY2tldHMAAAAAAVQCAAAAD190aWNrZXRzX251bWJlcgAAAAABVQIAAAAgX3RpY2tldHNfbnVtYmVyX2hpZ2hfY29tcGV0aXRpb24AAAAAAVYCAAAAIF9ib3VnaHRfdGlja2V0c19oaWdoX2NvbXBldGl0aW9uAAAAAAFXAgAAAB1fYXZhaWxhYmxlX3B1cmNoYXNlX21hcmtldGluZwAAAAABWAIAAAAhX3B1cmNoYXNlZF9idXlfYXNzZXRfaW5fbWFya2V0aW5nAAAAAAFZAgAAABNfYm91Z2h0X2FsbG9jYXRpb25zAAAAAAFaAgAAAA1fY2xhaW1fc3RhdHVzAAAAAAJhYQIAAAAPX3RpY2tldHNfcmVzdWx0AAAAAAJhYgIAAAAgX3RpY2tldHNfcmVzdWx0X2hpZ2hfY29tcGV0aXRpb24AAAAAAmFjAgAAABRfZnJlZXplX3Rva2VuX2Ftb3VudAAAAAACYWQJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVTpRaoekC86rvG6DuYumpJfGpiE4fNiswgAAAAAAmFlCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUqvpp3oH0E1KFyj8uOohRsxnqmBxZ8g0tAAAAAAJhZgkBAAAAB0FkZHJlc3MAAAABAQAAABoBVIwpHfmxeVLLCX5an9rXLwYHFIPsDN0RSQAAAAACYWcJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVS5ic3PR3G6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", "height": 1933261, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2KP9L9eR9JSXtzqRMQMe8kN7jdLRKNGXZV9HKhPG9WcZ Next: vpdDVcPMk3y3kBsdqNQgc7TXAQnQ2FCuaNNJUfrcMDM Diff:
OldNewDifferences
475475 then throw("Can't transfer negative value to project")
476476 else {
477477 let inv = if ((buyAssetId == USDN))
478- then throw("1")
478+ then invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toBase58String(USDN)], nil)
479479 else 0
480480 if ((inv == inv))
481- then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, (((swopfiMembersBuyAssetAmount + swopfiHCBuyAssetAmount) + totalAmountBuyAssetInMarketing) - transferedBuyAsset), buyAssetId), ScriptTransfer(commissionWallet, ((swopfiMembersComission + marketingComission) + swopfiHCComission), buyAssetId)]
481+ then if ((1 == 1))
482+ then throw("1")
483+ else [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, (((swopfiMembersBuyAssetAmount + swopfiHCBuyAssetAmount) + totalAmountBuyAssetInMarketing) - transferedBuyAsset), buyAssetId), ScriptTransfer(commissionWallet, ((swopfiMembersComission + marketingComission) + swopfiHCComission), buyAssetId)]
482484 else throw("Strict value is not equal to itself.")
483485 }
484486 }
504506 else false)
505507 then throw("You can't claim because you don't buy anything")
506508 else {
507- let $t02543625586 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
508- let buyAssetId = $t02543625586._1
509- let buyAssetStrId = $t02543625586._2
510- let buyAssetName = $t02543625586._3
511- let buyAssetDecimals = $t02543625586._4
509+ let $t02550325653 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
510+ let buyAssetId = $t02550325653._1
511+ let buyAssetStrId = $t02550325653._2
512+ let buyAssetName = $t02550325653._3
513+ let buyAssetDecimals = $t02550325653._4
512514 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
513515 let wonnedHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedHighCompetitionTicketsAmount)), 0)
514516 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
517519 let allowedAllocations = min([boughtAllocations, awailableAllocations])
518520 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
519521 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
520- let $t02649226636 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521- let tokenId = $t02649226636._1
522- let tokenStrAssetId = $t02649226636._2
523- let tokenAssetName = $t02649226636._3
524- let tokenDecimals = $t02649226636._4
522+ let $t02655926703 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
523+ let tokenId = $t02655926703._1
524+ let tokenStrAssetId = $t02655926703._2
525+ let tokenAssetName = $t02655926703._3
526+ let tokenDecimals = $t02655926703._4
525527 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
526528 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
527529 let transferTokensAmount = (((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation)) + (wonnedHCTickets * tokensPerTicket))
618620 @Callable(i)
619621 func transferBuyAsset (launchpadId,amount) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
620622 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
621- let $t03284232992 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
622- let buyAssetId = $t03284232992._1
623- let buyAssetStrId = $t03284232992._2
624- let buyAssetName = $t03284232992._3
625- let buyAssetDecimals = $t03284232992._4
623+ let $t03290933059 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
624+ let buyAssetId = $t03290933059._1
625+ let buyAssetStrId = $t03290933059._2
626+ let buyAssetName = $t03290933059._3
627+ let buyAssetDecimals = $t03290933059._4
626628 [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
627629 }))
628630
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)
471471 let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
472472 let marketingComission = fraction(totalAmountBuyAssetInMarketing, commission, 100)
473473 let unstakeAmount = (((((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiMembersComission) + marketingComission) + swopfiHCBuyAssetAmount) + swopfiHCComission)
474474 if ((transferedBuyAsset > (swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing)))
475475 then throw("Can't transfer negative value to project")
476476 else {
477477 let inv = if ((buyAssetId == USDN))
478- then throw("1")
478+ then invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toBase58String(USDN)], nil)
479479 else 0
480480 if ((inv == inv))
481- then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, (((swopfiMembersBuyAssetAmount + swopfiHCBuyAssetAmount) + totalAmountBuyAssetInMarketing) - transferedBuyAsset), buyAssetId), ScriptTransfer(commissionWallet, ((swopfiMembersComission + marketingComission) + swopfiHCComission), buyAssetId)]
481+ then if ((1 == 1))
482+ then throw("1")
483+ else [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, (((swopfiMembersBuyAssetAmount + swopfiHCBuyAssetAmount) + totalAmountBuyAssetInMarketing) - transferedBuyAsset), buyAssetId), ScriptTransfer(commissionWallet, ((swopfiMembersComission + marketingComission) + swopfiHCComission), buyAssetId)]
482484 else throw("Strict value is not equal to itself.")
483485 }
484486 }
485487 }))
486488
487489
488490
489491 @Callable(i)
490492 func claim (launchpadId) = valueOrElse(isActive(), {
491493 let boughtTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
492494 let boughtHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
493495 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
494496 let userClaimStatus = valueOrElse(getBoolean(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus)), false)
495497 let finalizeHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)), 0)
496498 if ((finalizeHeight == 0))
497499 then throw("You can't claim because results are not finalized")
498500 else if (userClaimStatus)
499501 then throw("You are already claimed")
500502 else if (if (if ((boughtTickets == 0))
501503 then (boughtAllocations == 0)
502504 else false)
503505 then (boughtHCTickets == 0)
504506 else false)
505507 then throw("You can't claim because you don't buy anything")
506508 else {
507- let $t02543625586 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
508- let buyAssetId = $t02543625586._1
509- let buyAssetStrId = $t02543625586._2
510- let buyAssetName = $t02543625586._3
511- let buyAssetDecimals = $t02543625586._4
509+ let $t02550325653 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
510+ let buyAssetId = $t02550325653._1
511+ let buyAssetStrId = $t02550325653._2
512+ let buyAssetName = $t02550325653._3
513+ let buyAssetDecimals = $t02550325653._4
512514 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
513515 let wonnedHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedHighCompetitionTicketsAmount)), 0)
514516 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
515517 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
516518 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
517519 let allowedAllocations = min([boughtAllocations, awailableAllocations])
518520 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
519521 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
520- let $t02649226636 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521- let tokenId = $t02649226636._1
522- let tokenStrAssetId = $t02649226636._2
523- let tokenAssetName = $t02649226636._3
524- let tokenDecimals = $t02649226636._4
522+ let $t02655926703 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
523+ let tokenId = $t02655926703._1
524+ let tokenStrAssetId = $t02655926703._2
525+ let tokenAssetName = $t02655926703._3
526+ let tokenDecimals = $t02655926703._4
525527 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
526528 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
527529 let transferTokensAmount = (((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation)) + (wonnedHCTickets * tokensPerTicket))
528530 let notAllowedAllocationsTokens = ((boughtAllocations - allowedAllocations) * tokensPerAllocation)
529531 let buyAssetForAllocations = fraction(fraction(notAllowedAllocationsTokens, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
530532 let buyAssetForUnwonnedTickets = fraction(((boughtTickets - wonnedTickets) * ticketPrice), (100 + commission), 100)
531533 let buyAssetForHCUnwonnedTickets = fraction(((boughtHCTickets - wonnedHCTickets) * ticketPrice), (100 + commissionHC), 100)
532534 let claimedBuyToken = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedBuyTokens)), 0)
533535 if (if (if ((0 > buyAssetForAllocations))
534536 then true
535537 else (0 > buyAssetForUnwonnedTickets))
536538 then true
537539 else (0 > buyAssetForHCUnwonnedTickets))
538540 then throw("Error with allowed allocation param or wonned tickets param please contact support")
539541 else {
540542 let returnedBuyAssetAmount = (((buyAssetForUnwonnedTickets + buyAssetForHCUnwonnedTickets) + buyAssetForAllocations) - claimedBuyToken)
541543 let transferBuyAsset = if ((returnedBuyAssetAmount > 0))
542544 then [ScriptTransfer(i.caller, returnedBuyAssetAmount, buyAssetId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedBuyTokens), returnedBuyAssetAmount)]
543545 else nil
544546 let inv = if (if ((returnedBuyAssetAmount > 0))
545547 then (buyAssetId == USDN)
546548 else false)
547549 then invoke(stakingUSDNAddress, "unlockNeutrino", [returnedBuyAssetAmount, toBase58String(USDN)], nil)
548550 else 0
549551 if ((inv == inv))
550552 then {
551553 let claimedParams = split(valueOrElse(getString(this, (toString(launchpadId) + keyClaimParams)), ""), ",")
552554 if (if ((size(claimedParams) == 0))
553555 then true
554556 else (claimedParams[0] == "claimAll"))
555557 then {
556558 let transferTokens = if ((transferTokensAmount > 0))
557559 then [ScriptTransfer(i.caller, transferTokensAmount, tokenId)]
558560 else nil
559561 (([BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens), transferTokensAmount)] ++ transferTokens) ++ transferBuyAsset)
560562 }
561563 else if ((claimedParams[0] == "claimPeriod"))
562564 then {
563565 let claimedTokens = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens)), 0)
564566 let unlockPeriod = value(parseInt(claimedParams[2]))
565567 let blockHeight = (value(parseInt(claimedParams[3])) + finalizeHeight)
566568 let unlockHeight = (unlockPeriod + blockHeight)
567569 let allowedStartAmount = fraction(transferTokensAmount, value(parseInt(claimedParams[1])), 100)
568570 let allowedTokensAmount = (allowedStartAmount + (if ((height > blockHeight))
569571 then (fraction((transferTokensAmount - allowedStartAmount), (min([height, unlockHeight]) - blockHeight), unlockPeriod) - claimedTokens)
570572 else (0 - claimedTokens)))
571573 let claimStatusEntry = if ((transferTokensAmount >= (claimedTokens + allowedTokensAmount)))
572574 then [BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true)]
573575 else nil
574576 if (if ((allowedTokensAmount > 0))
575577 then true
576578 else (returnedBuyAssetAmount > 0))
577579 then {
578580 let transferTokens = if ((allowedTokensAmount > 0))
579581 then [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens), (claimedTokens + allowedTokensAmount)), ScriptTransfer(i.caller, allowedTokensAmount, tokenId)]
580582 else nil
581583 (transferBuyAsset ++ transferTokens)
582584 }
583585 else throw("Nothing to claim")
584586 }
585587 else throw("Unknown claim function")
586588 }
587589 else throw("Strict value is not equal to itself.")
588590 }
589591 }
590592 })
591593
592594
593595
594596 @Callable(i)
595597 func claimFreezeToken (launchpadId) = valueOrElse(isActive(), {
596598 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
597599 if (!(isDefined(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)))))
598600 then throw("You can't claim because results are not finalized")
599601 else if (!(freezeAdditionalToken))
600602 then throw("There are no additional token freezing for this launchpad")
601603 else {
602604 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyFreezeTokenId)))
603605 let userTokensFreezed = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken)), 0)
604606 let startHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyStartHeight)), 0)
605607 let duration = valueOrElse(getInteger(this, (toString(launchpadId) + keyDuration)), 0)
606608 let freezeTokenDuration = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenDuration))
607609 let blockEndHeight = ((startHeight + duration) + freezeTokenDuration)
608610 if ((userTokensFreezed == 0))
609611 then throw("You are already claimed your tokens or not paid anything")
610612 else if ((blockEndHeight > height))
611613 then throw(("Your tokens freezed teel " + toString(blockEndHeight)))
612614 else [ScriptTransfer(i.caller, userTokensFreezed, tokenId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), 0)]
613615 }
614616 })
615617
616618
617619
618620 @Callable(i)
619621 func transferBuyAsset (launchpadId,amount) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
620622 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
621- let $t03284232992 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
622- let buyAssetId = $t03284232992._1
623- let buyAssetStrId = $t03284232992._2
624- let buyAssetName = $t03284232992._3
625- let buyAssetDecimals = $t03284232992._4
623+ let $t03290933059 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
624+ let buyAssetId = $t03290933059._1
625+ let buyAssetStrId = $t03290933059._2
626+ let buyAssetName = $t03290933059._3
627+ let buyAssetDecimals = $t03290933059._4
626628 [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
627629 }))
628630
629631
630632
631633 @Callable(i)
632634 func shutdown () = valueOrElse(isAdminCall(i), if (!(active))
633635 then throw("DApp already inactive")
634636 else [BooleanEntry(keyActive, false)])
635637
636638
637639
638640 @Callable(i)
639641 func activate () = valueOrElse(isAdminCall(i), if (active)
640642 then throw("DApp already active")
641643 else [BooleanEntry(keyActive, true)])
642644
643645
644646 @Verifier(tx)
645647 func verify () = {
646648 let multiSignedByAdmins = {
647649 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
648650 then 1
649651 else 0
650652 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
651653 then 1
652654 else 0
653655 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
654656 then 1
655657 else 0
656658 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
657659 }
658660 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
659661 then true
660662 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
661663 then true
662664 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
663665 then true
664666 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKeyStaking)
665667 match tx {
666668 case dtx: DataTransaction =>
667669 if (valueOrElse(getBoolean(oracle, keyLaunchpadDataTransactionStatus), false))
668670 then signedByAdmin
669671 else false
670672 case _ =>
671673 multiSignedByAdmins
672674 }
673675 }
674676

github/deemru/w8io/026f985 
108.73 ms