tx · 5DJKTBUbZTpSd8zzPtqirMmNwaKcB2TyakNtmBrqe2tf

3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi:  -0.01400000 Waves

2021.12.14 16:25 [1833982] smart account 3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi > SELF 0.00000000 Waves

{ "type": 13, "id": "5DJKTBUbZTpSd8zzPtqirMmNwaKcB2TyakNtmBrqe2tf", "fee": 1400000, "feeAssetId": null, "timestamp": 1639488359447, "version": 2, "chainId": 84, "sender": "3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi", "senderPublicKey": "FRotxVW1MhTQRDvVbMM4yvYGWzBFvHqvMsonvGeEXQUy", "proofs": [ "4N6wco3QbcmadetDSNVULb4VjaCpLX4vP6q28n6PgsEwDt6RwXT6a5u2ZCSYDwnh7PpycZYrt91Mykw5YDizVLkD", "4meNtqvrYfdHgUHKqXig1d6uiofujjzaDupEzd1kewQULZKuMgLZKZi5Nqkecy1rbpLpTxhpRZWKN1xXS8gwpqNv" ], "script": "base64:AAIFAAAAAAAAEzoIAhIECgIBCBIDCgEIEhQKEggBAQgBAQEBAQEBARgEAQEEGBIECgIBCBIECgIBCBIECgIBCBIFCgMBAQgSAwoBARIDCgEBEgQKAgEBEgASABoPCgJhMRIJa2V5QWN0aXZlGhUKAmEyEg9rZXlBZG1pblB1YktleTEaFQoCYTMSD2tleUFkbWluUHViS2V5MhoVCgJhNBIPa2V5QWRtaW5QdWJLZXkzGicKAmE1EiFrZXlMYXVuY2hwYWREYXRhVHJhbnNhY3Rpb25TdGF0dXMaGAoCYTYSEmtleUxhdW5jaHBhZE5leHRJZBoaCgJhNxIUa2V5TGF1bmNocGFkQWN0aXZlSWQaEwoCYTgSDWtleUluaXRDYWxsZXIaEAoCYTkSCmtleUFkZHJlc3MaEwoCYjESDWtleUluaXRIZWlnaHQaFAoCYjISDmtleVN0YXJ0SGVpZ2h0GhcKAmIzEhFrZXlGaW5hbGlzZUhlaWdodBoSCgJiNBIMa2V5Q29taXNzaW9uGhAKAmI1EgprZXlBc3NldElkGhkKAmI2EhNrZXlUb3RhbFRva2VuQW1vdW50GiAKAmI3EhprZXlUb3RhbEFtb3VudEJ1eUFzc2V0U29sZBoYCgJiOBISa2V5VG9rZW5zUGVyVGlja2V0GhYKAmI5EhBrZXlQcmljZVBlclRva2VuGhYKAmMxEhBrZXlTd29wUGVyVGlja2V0GhwKAmMyEhZrZXlTd29wZmlUaWNrZXRzQW1vdW50Gh0KAmMzEhdrZXlDYW1wYWlnblRva2Vuc0Ftb3VudBocCgJjNBIWa2V5VG9rZW5zUGVyQWxsb2NhdGlvbhoZCgJjNRITa2V5VGlja2V0TGFzdE51bWJlchoZCgJjNhITa2V5R292ZXJuYW5jZVN0YWtlZBoSCgJjNxIMa2V5VXNlclJlZklkGhMKAmM4Eg1rZXlWZXJpZnlIYXNoGhEKAmM5EgtrZXlEdXJhdGlvbhoiCgJkMRIca2V5QW1vdW50QnV5QXNzZXRJbk1hcmtldGluZxorCgJkMhIla2V5QW1vdW50QnV5QXNzZXRJbk1hcmtldGluZ0ZpbmFsaXplZBoZCgJkMxITa2V5VHJhbnNmZXJCdXlBc3NldBoaCgJkNBIUa2V5RnJlZXpTd29wRHVyYXRpb24aHgoCZDUSGGtleUZyZWV6ZUFkZGl0aW9uYWxUb2tlbhoWCgJkNhIQa2V5RnJlZXplVG9rZW5JZBocCgJkNxIWa2V5RnJlZXplVG9rZW5EdXJhdGlvbhodCgJkOBIXa2V5RnJlZXplVG9rZW5QZXJUaWNrZXQaEQoCZDkSC2tleUJ1eVRva2VuGhQKAmUxEg5rZXlDbGFpbVBhcmFtcxohCgJlMhIba2V5SGlnaENvbXBldGl0aW9uQ29taXNzaW9uGhwKAmUzEhZrZXlIaWdoQ29tcGV0aXRpb25TYWxlGhsKAmU0EhVrZXlIQ1RpY2tldExhc3ROdW1iZXIaHgoCZTUSGGtleUhpZ2hDb21wZXRpdGlvbkFtb3VudBoiCgJlNhIca2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGRIQxogCgJlNxIaa2V5VXNlckJvdWdodFRpY2tldHNBbW91bnQaFAoCZTgSDmtleVVzZXJUaWNrZXRzGhYKAmU5EhBrZXlVc2VySENUaWNrZXRzGiIKAmYxEhxrZXlVc2VySENCb3VnaHRUaWNrZXRzQW1vdW50GiEKAmYyEhtrZXlVc2VyQXZhaWxhYmxlQWxsb2NhdGlvbnMaJgoCZjMSIGtleVVzZXJBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGh4KAmY0EhhrZXlVc2VyQm91Z2h0QWxsb2NhdGlvbnMaGAoCZjUSEmtleVVzZXJDbGFpbVN0YXR1cxogCgJmNhIaa2V5VXNlcldpbm5lZFRpY2tldHNBbW91bnQaLwoCZjcSKWtleVVzZXJXaW5uZWRIaWdoQ29tcGV0aXRpb25UaWNrZXRzQW1vdW50GhgKAmY4EhJrZXlVc2VyRnJlZXplVG9rZW4aDAoCZjkSBm9yYWNsZRoQCgJnMRIKZ292ZXJuYW5jZRoWCgJnMhIQY29tbWlzc2lvbldhbGxldBoYCgJnMxISc3Rha2luZ1VTRE5BZGRyZXNzGgoKAmc0EgRVU0ROGhgKAmc1EhJhZG1pblB1YktleVN0YWtpbmcaGgoCZzYSFG1heEFsbG9jYXRpb25zQW1vdW50Gg4KAmc3Eghpc0FjdGl2ZRoXCgJnOBIRYWN0aXZlTGF1bmNocGFkSWQaEQoCZzkSC2dldEFkbWluUHViGhEKAmgxEgtrZXlBZG1pblB1YhoNCgJoMhIHJG1hdGNoMBoMCgJoMxIGc3RyaW5nGg0KAmg0Egdub3RoaW5nGhIKAmg1EgxhZG1pblB1YktleTEaEgoCaDYSDGFkbWluUHViS2V5MhoSCgJoNxIMYWRtaW5QdWJLZXkzGhIKAmg4EgxnZXRBc3NldEluZm8aDQoCaDkSB2Fzc2V0SWQaDgoCaTESCHN0cmluZ0lkGgoKAmkyEgRpbmZvGgsKAmkzEgV3YXZlcxoYCgJpNBISZ2V0TGF1bmNocGFkTmV4dElkGhYKAmk1EhBzdGFrZWRVc2RuQW1vdW50GhwKAmk2EhZnZXRBc3NldEluZm9Gcm9tU3RyaW5nGg4KAmk3Eghhc3NldFN0choRCgJpOBILbGF1bmNocGFkSWQaCgoCaTkSBGhhc2gaDQoCajESB2FkZHJlc3MaFAoCajISDnByb2plY3RBZGRyZXNzGhEKAmozEgtzdGFydEhlaWdodBoOCgJqNBIIZHVyYXRpb24aDgoCajUSCGJ1eVRva2VuGhAKAmo2Egpjb21taXNzaW9uGhUKAmo3Eg90b2tlbnNQZXJUaWNrZXQaEwoCajgSDXByaWNlUGVyVG9rZW4aGQoCajkSE3N3b3BmaVRpY2tldHNBbW91bnQaGgoCazESFGNhbXBhaWduVG9rZW5zQW1vdW50GhkKAmsyEhN0b2tlbnNQZXJBbGxvY2F0aW9uGhMKAmszEg1zd29wUGVyVGlja2V0GhgKAms0EhJzd29wRnJlZXplRHVyYXRpb24aEQoCazUSC2NsYWltUGFyYW1zGhkKAms2EhNIaWdoQ29tcGV0aXRpb25TYWxlGh4KAms3EhhoaWdoQ29tcGV0aXRpb25Db21pc3Npb24aIgoCazgSHGhpZ2hDb21wZXRpdGlvblRpY2tldHNBbW91bnQaGwoCazkSFWZyZWV6ZUFkZGl0aW9uYWxUb2tlbhoSCgJsMRIMZnJlZXplUGFyYW1zGhQKAmwyEg5sYXVuY2hwYWRJZFN0choRCgJsMxILJHQwNjQ2MDY1MzUaDwoCbDQSCXBtdEFtb3VudBoQCgJsNRIKcG10QXNzZXRJZBoRCgJsNhILJHQwNjU0NDY2MTcaEwoCbDcSDXBtdFN0ckFzc2V0SWQaEgoCbDgSDHBtdEFzc2V0TmFtZRoRCgJsORILcG10RGVjaW1hbHMaGwoCbTESFWZyZWV6ZUFkZGl0aW9uYWxFbnRyeRoLCgJtMhIFcmVmSWQaEQoCbTMSCyR0MDkxMzA5MjA1GhEKAm00EgskdDA5MjEwOTM2MBoQCgJtNRIKYnV5QXNzZXRJZBoTCgJtNhINYnV5QXNzZXRTdHJJZBoSCgJtNxIMYnV5QXNzZXROYW1lGhYKAm04EhBidXlBc3NldERlY2ltYWxzGhEKAm05EgtzdGFrZWRTd29wcxodCgJuMRIXYWxsb3dlZFRpY2tldHNBbW91bnRBbGwaGQoCbjISE2JvdWdodFRpY2tldHNBbW91bnQaGgoCbjMSFGFsbG93ZWRUaWNrZXRzQW1vdW50GhMKAm40Eg1mcmVlemVUb2tlbklkGhAKAm41Egp0b2tlblByaWNlGhMKAm42Eg0kdDAxMTI0ODExMzkyGg0KAm43Egd0b2tlbklkGhUKAm44Eg90b2tlblN0ckFzc2V0SWQaFAoCbjkSDnRva2VuQXNzZXROYW1lGhMKAm8xEg10b2tlbkRlY2ltYWxzGhEKAm8yEgt0aWNrZXRQcmljZRoZCgJvMxITY29tbWlzc2lvblBlclRpY2tldBoVCgJvNBIPYnV5VGlja2V0QW1vdW50GhwKAm81EhZhbGxvd2VkQnV5VGlja2V0QW1vdW50GiIKAm82EhxhbGxvd2VkQnV5UHJpY2VXaXRoQ29taXNzaW9uGgwKAm83EgZjaGFuZ2UaGgoCbzgSFGZyZWV6ZVRva2VuUGVyVGlja2V0GhMKAm85Eg0kdDAxMjU1NjEyNjQzGhUKAnAxEg9wbXRBbW91bnRGcmVlemUaFgoCcDISEHBtdEFzc2V0SWRGcmVlemUaEwoCcDMSDSR0MDEyNjYwMTI3NTEaGQoCcDQSE3BtdEZyZWV6ZVN0ckFzc2V0SWQaGAoCcDUSEnBtdEZyZWV6ZUFzc2V0TmFtZRoXCgJwNhIRcG10RnJlZXplRGVjaW1hbHMaFgoCcDcSEG5lZWRGcmVlemVUb2tlbnMaHgoCcDgSGHVzZXJCb3VnaHRUaWNrZXRzTnVtYmVycxocCgJwORIWbGFzdEJvdWdodFRpY2tldE51bWJlchoRCgJxMRILYm91Z2h0UmFuZ2UaIQoCcTISG25ld1VzZXJCb3VnaHRUaWNrZXRzTnVtYmVycxoJCgJxMxIDaW52Gg8KAnE0EgliYXNlRW50cnkaEwoCcTUSDSR0MDE0Nzk4MTQ4NzMaEwoCcTYSDSR0MDE0ODc4MTUwMjgaGQoCcTcSE3VzZXJVc2RuSW5NYXJrZXRpbmcaFQoCcTgSD3VzZG5Jbk1hcmtldGluZxoXCgJxORIRYm91Z2h0QWxsb2NhdGlvbnMaEwoCcjESDSR0MDE1Njk3MTU4NDEaIgoCcjISHGFsbG9jYXRpb25QcmljZVdpdGhDb21pc3Npb24aGgoCcjMSFGJ1eUFsbG9jYXRpb25zQW1vdW50GhMKAnI0Eg0kdDAxODE1MDE4MjI1GhMKAnI1Eg0kdDAxODIzMDE4MzgwGhsKAnI2EhVib3VnaHRIQ1RpY2tldHNBbW91bnQaGQoCcjcSE2hpZ2hDb21wZXRpdGlvblNhbGUaEwoCcjgSDSR0MDE5NjI5MTk3NzMaGwoCcjkSFWJ1eVByaWNlV2l0aENvbWlzc2lvbhoPCgJzMRIJdnJmSGVpZ2h0GhAKAnMyEgpzZWNyZXRXb3JkGg8KAnMzEglzYXZlZEhhc2gaDgoCczQSCGNhbGNIYXNoGhMKAnM1Eg0kdDAyMjU1ODIyNzA4GhIKAnM2Egxjb21taXNzaW9uSEMaGAoCczcSEnRyYW5zZmVyZWRCdXlBc3NldBohCgJzOBIbc3dvcGZpTWVtYmVyc0J1eUFzc2V0QW1vdW50GhwKAnM5EhZzd29wZmlIQ0J1eUFzc2V0QW1vdW50GhwKAnQxEhZzd29wZmlNZW1iZXJzQ29taXNzaW9uGhcKAnQyEhFzd29wZmlIQ0NvbWlzc2lvbhokCgJ0MxIedG90YWxBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGhgKAnQ0EhJtYXJrZXRpbmdDb21pc3Npb24aEwoCdDUSDXVuc3Rha2VBbW91bnQaFQoCdDYSD3VzZXJDbGFpbVN0YXR1cxoTCgJ0NxINYm91Z2h0VGlja2V0cxoTCgJ0OBINJHQwMjU1NjcyNTcxNxoTCgJ0ORINd29ubmVkVGlja2V0cxoaCgJ1MRIUYXdhaWxhYmxlQWxsb2NhdGlvbnMaGAoCdTISEmFsbG93ZWRBbGxvY2F0aW9ucxoTCgJ1MxINJHQwMjYzNjQyNjUwOBoaCgJ1NBIUdHJhbnNmZXJUb2tlbnNBbW91bnQaIQoCdTUSG25vdEFsbG93ZWRBbGxvY2F0aW9uc1Rva2VucxocCgJ1NhIWYnV5QXNzZXRGb3JBbGxvY2F0aW9ucxogCgJ1NxIaYnV5QXNzZXRGb3JVbndvbm5lZFRpY2tldHMaHAoCdTgSFnJldHVybmVkQnV5QXNzZXRBbW91bnQaEgoCdTkSDHRyYW5zZmVyVXNkbhoUCgJ2MRIOdHJhbnNmZXJUb2tlbnMaFwoCdjISEXVzZXJUb2tlbnNGcmVlemVkGhkKAnYzEhNmcmVlemVUb2tlbkR1cmF0aW9uGhQKAnY0Eg5ibG9ja0VuZEhlaWdodBoMCgJ2NRIGYW1vdW50GhMKAnY2Eg0kdDAzMDE4MDMwMzMwGgwKAnY3EgZ2ZXJpZnkaGQoCdjgSE211bHRpU2lnbmVkQnlBZG1pbnMaGAoCdjkSEmFkbWluUHViS2V5MVNpZ25lZBoYCgJ3MRISYWRtaW5QdWJLZXkyU2lnbmVkGhgKAncyEhJhZG1pblB1YktleTNTaWduZWQaEwoCdzMSDXNpZ25lZEJ5QWRtaW4aCQoCdzQSA2R0eAAAAEYAAAAAAmExAgAAAAZhY3RpdmUAAAAAAmEyAgAAAAthZG1pbl9wdWJfMQAAAAACYTMCAAAAC2FkbWluX3B1Yl8yAAAAAAJhNAIAAAALYWRtaW5fcHViXzMAAAAAAmE1AgAAACFsYXVuY2hwYWRfZGF0YV90cmFuc2FjdGlvbl9zdGF0dXMAAAAAAmE2AgAAABFsYXVuY2hwYWRfbmV4dF9pZAAAAAACYTcCAAAAE2xhdW5jaHBhZF9hY3RpdmVfaWQAAAAAAmE4AgAAAAtpbml0X2NhbGxlcgAAAAACYTkCAAAACF9hZGRyZXNzAAAAAAJiMQIAAAAMX2luaXRfaGVpZ2h0AAAAAAJiMgIAAAANX3N0YXJ0X2hlaWdodAAAAAACYjMCAAAAEF9maW5hbGlzZV9oZWlnaHQAAAAAAmI0AgAAAApfY29taXNzaW9uAAAAAAJiNQIAAAAJX2Fzc2V0X2lkAAAAAAJiNgIAAAATX3RvdGFsX3Rva2VuX2Ftb3VudAAAAAACYjcCAAAAFV90b3RhbF9idXlfYXNzZXRfc29sZAAAAAACYjgCAAAAEl90b2tlbnNfcGVyX3RpY2tldAAAAAACYjkCAAAAEF9wcmljZV9wZXJfdG9rZW4AAAAAAmMxAgAAABBfc3dvcF9wZXJfdGlja2V0AAAAAAJjMgIAAAAXX3RpY2tldHNfc3dvcGZpX21lbWJlcnMAAAAAAmMzAgAAABNfdG9rZW5zX2FjY2Vzc19saXN0AAAAAAJjNAIAAAAWX3Rva2Vuc19wZXJfYWxsb2NhdGlvbgAAAAACYzUCAAAAJF90aWNrZXRfbGFzdF9udW1iZXJfaGlnaF9jb21wZXRpdGlvbgAAAAACYzYCAAAADF9TV09QX2Ftb3VudAAAAAACYzcCAAAAB19yZWZfaWQAAAAAAmM4AgAAAAxfdmVyaWZ5X2hhc2gAAAAAAmM5AgAAAAlfZHVyYXRpb24AAAAAAmQxAgAAACdfdG90YWxfcHVyY2hhc2VkX2J1eV9hc3NldF9pbl9tYXJrZXRpbmcAAAAAAmQyAgAAADFfdG90YWxfcHVyY2hhc2VkX2J1eV9hc3NldF9pbl9tYXJrZXRpbmdfZmluYWxpemVkAAAAAAJkMwIAAAATX3RyYW5zZmVyX2J1eV9hc3NldAAAAAACZDQCAAAAFV9mcmVlemVfc3dvcF9kdXJhdGlvbgAAAAACZDUCAAAAGF9mcmVlemVfYWRkaXRpb25hbF90b2tlbgAAAAACZDYCAAAAEF9mcmVlemVfdG9rZW5faWQAAAAAAmQ3AgAAABZfZnJlZXplX3Rva2VuX2R1cmF0aW9uAAAAAAJkOAIAAAAYX2ZyZWV6ZV90b2tlbl9wZXJfdGlja2V0AAAAAAJkOQIAAAAKX2J1eV90b2tlbgAAAAACZTECAAAADV9jbGFpbV9wYXJhbXMAAAAAAmUyAgAAABtfaGlnaF9jb21wZXRpdGlvbl9jb21pc3Npb24AAAAAAmUzAgAAABZfaGlnaF9jb21wZXRpdGlvbl9zYWxlAAAAAAJlNAIAAAAkX2hpZ2hfY29tcGV0aXRpb25fdGlja2V0X2xhc3RfbnVtYmVyAAAAAAJlNQIAAAAZX3RpY2tldHNfaGlnaF9jb21wZXRpdGlvbgAAAAACZTYCAAAAJl90b3RhbF9idXlfYXNzZXRfc29sZF9oaWdoX2NvbXBldGl0aW9uAAAAAAJlNwIAAAAPX2JvdWdodF90aWNrZXRzAAAAAAJlOAIAAAAPX3RpY2tldHNfbnVtYmVyAAAA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", "height": 1833982, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 472AGAchqVUaSHUBUBHuXF6feBdwjbsh6bGao5kS8Egc Next: DY7MKkABKfTiV8XzFkqjR1RNnAw25S7FwSQnrGPjGaHq Diff:
OldNewDifferences
7979
8080 let keyHighCompetitionSale = "_high_competition_sale"
8181
82-let keyHCTicketLastNumber = "_ticket_last_number"
82+let keyHCTicketLastNumber = "_high_competition_ticket_last_number"
8383
8484 let keyHighCompetitionAmount = "_tickets_high_competition"
8585
102102 let keyUserClaimStatus = "_claim_status"
103103
104104 let keyUserWinnedTicketsAmount = "_tickets_result"
105+
106+let keyUserWinnedHighCompetitionTicketsAmount = "_tickets_result_high_competition"
105107
106108 let keyUserFreezeToken = "_freeze_token_amount"
107109
199201 else {
200202 let launchpadId = getLaunchpadNextId()
201203 let launchpadIdStr = toString(launchpadId)
202- let $t063546429 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
203- let pmtAmount = $t063546429._1
204- let pmtAssetId = $t063546429._2
205- let $t064386511 = getAssetInfo(pmtAssetId)
206- let pmtStrAssetId = $t064386511._1
207- let pmtAssetName = $t064386511._2
208- let pmtDecimals = $t064386511._3
204+ let $t064606535 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
205+ let pmtAmount = $t064606535._1
206+ let pmtAssetId = $t064606535._2
207+ let $t065446617 = getAssetInfo(pmtAssetId)
208+ let pmtStrAssetId = $t065446617._1
209+ let pmtAssetName = $t065446617._2
210+ let pmtDecimals = $t065446617._3
209211 let freezeAdditionalEntry = if (freezeAdditionalToken)
210212 then [BooleanEntry((launchpadIdStr + keyFreezeAdditionalToken), true), StringEntry((launchpadIdStr + keyFreezeTokenId), freezeParams[0]), IntegerEntry((launchpadIdStr + keyFreezeTokenDuration), parseIntValue(freezeParams[1])), IntegerEntry((launchpadIdStr + keyFreezeTokenPerTicket), parseIntValue(freezeParams[2]))]
211213 else nil
216218
217219 @Callable(i)
218220 func commitSwopfiSale (launchpadId,refId) = {
219- let $t090249099 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
220- let pmtAmount = $t090249099._1
221- let pmtAssetId = $t090249099._2
222- let $t091049254 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
223- let buyAssetId = $t091049254._1
224- let buyAssetStrId = $t091049254._2
225- let buyAssetName = $t091049254._3
226- let buyAssetDecimals = $t091049254._4
221+ let $t091309205 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
222+ let pmtAmount = $t091309205._1
223+ let pmtAssetId = $t091309205._2
224+ let $t092109360 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
225+ let buyAssetId = $t092109360._1
226+ let buyAssetStrId = $t092109360._2
227+ let buyAssetName = $t092109360._3
228+ let buyAssetDecimals = $t092109360._4
227229 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
228230 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
229231 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
261263 else {
262264 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
263265 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
264- let $t01114211286 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
265- let tokenId = $t01114211286._1
266- let tokenStrAssetId = $t01114211286._2
267- let tokenAssetName = $t01114211286._3
268- let tokenDecimals = $t01114211286._4
266+ let $t01124811392 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
267+ let tokenId = $t01124811392._1
268+ let tokenStrAssetId = $t01124811392._2
269+ let tokenAssetName = $t01124811392._3
270+ let tokenDecimals = $t01124811392._4
269271 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
270272 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
271273 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
281283 then {
282284 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
283285 let freezeTokenPerTicket = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenPerTicket))
284- let $t01245012537 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
285- let pmtAmountFreeze = $t01245012537._1
286- let pmtAssetIdFreeze = $t01245012537._2
287- let $t01255412645 = getAssetInfo(pmtAssetId)
288- let pmtFreezeStrAssetId = $t01255412645._1
289- let pmtFreezeAssetName = $t01255412645._2
290- let pmtFreezeDecimals = $t01255412645._3
286+ let $t01255612643 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
287+ let pmtAmountFreeze = $t01255612643._1
288+ let pmtAssetIdFreeze = $t01255612643._2
289+ let $t01266012751 = getAssetInfo(pmtAssetId)
290+ let pmtFreezeStrAssetId = $t01266012751._1
291+ let pmtFreezeAssetName = $t01266012751._2
292+ let pmtFreezeDecimals = $t01266012751._3
291293 let needFreezeTokens = (freezeTokenPerTicket * buyTicketAmount)
292294 if (if ((pmtFreezeStrAssetId != freezeTokenId))
293295 then true
321323
322324 @Callable(i)
323325 func commitAccessListSale (launchpadId,refId) = {
324- let $t01469214767 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
325- let pmtAmount = $t01469214767._1
326- let pmtAssetId = $t01469214767._2
327- let $t01477214922 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
328- let buyAssetId = $t01477214922._1
329- let buyAssetStrId = $t01477214922._2
330- let buyAssetName = $t01477214922._3
331- let buyAssetDecimals = $t01477214922._4
326+ let $t01479814873 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
327+ let pmtAmount = $t01479814873._1
328+ let pmtAssetId = $t01479814873._2
329+ let $t01487815028 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
330+ let buyAssetId = $t01487815028._1
331+ let buyAssetStrId = $t01487815028._2
332+ let buyAssetName = $t01487815028._3
333+ let buyAssetDecimals = $t01487815028._4
332334 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing)), 0)
333335 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountBuyAssetInMarketing)), 0)
334336 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
335337 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
336338 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
337339 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
338- let $t01559115735 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
339- let tokenId = $t01559115735._1
340- let tokenStrAssetId = $t01559115735._2
341- let tokenAssetName = $t01559115735._3
342- let tokenDecimals = $t01559115735._4
340+ let $t01569715841 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
341+ let tokenId = $t01569715841._1
342+ let tokenStrAssetId = $t01569715841._2
343+ let tokenAssetName = $t01569715841._3
344+ let tokenDecimals = $t01569715841._4
343345 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
344346 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
345347 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
381383
382384 @Callable(i)
383385 func commitHighCompetitionSale (launchpadId,refId) = {
384- let $t01804418119 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
385- let pmtAmount = $t01804418119._1
386- let pmtAssetId = $t01804418119._2
387- let $t01812418274 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
388- let buyAssetId = $t01812418274._1
389- let buyAssetStrId = $t01812418274._2
390- let buyAssetName = $t01812418274._3
391- let buyAssetDecimals = $t01812418274._4
386+ let $t01815018225 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
387+ let pmtAmount = $t01815018225._1
388+ let pmtAssetId = $t01815018225._2
389+ let $t01823018380 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
390+ let buyAssetId = $t01823018380._1
391+ let buyAssetStrId = $t01823018380._2
392+ let buyAssetName = $t01823018380._3
393+ let buyAssetDecimals = $t01823018380._4
392394 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
393395 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
394396 let boughtHCTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
410412 else {
411413 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
412414 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
413- let $t01952319667 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
414- let tokenId = $t01952319667._1
415- let tokenStrAssetId = $t01952319667._2
416- let tokenAssetName = $t01952319667._3
417- let tokenDecimals = $t01952319667._4
415+ let $t01962919773 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
416+ let tokenId = $t01962919773._1
417+ let tokenStrAssetId = $t01962919773._2
418+ let tokenAssetName = $t01962919773._3
419+ let tokenDecimals = $t01962919773._4
418420 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
419421 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission)), 100)
420422 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
459461 else if ((calcHash != savedHash))
460462 then throw("vrf Height hash not matching")
461463 else {
462- let $t02245222602 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
463- let buyAssetId = $t02245222602._1
464- let buyAssetStrId = $t02245222602._2
465- let buyAssetName = $t02245222602._3
466- let buyAssetDecimals = $t02245222602._4
464+ let $t02255822708 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
465+ let buyAssetId = $t02255822708._1
466+ let buyAssetStrId = $t02255822708._2
467+ let buyAssetName = $t02255822708._3
468+ let buyAssetDecimals = $t02255822708._4
467469 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
468470 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
469471 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
506508 else false)
507509 then throw("You can't claim because you don't buy anything")
508510 else {
509- let $t02546125611 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
510- let buyAssetId = $t02546125611._1
511- let buyAssetStrId = $t02546125611._2
512- let buyAssetName = $t02546125611._3
513- let buyAssetDecimals = $t02546125611._4
511+ let $t02556725717 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
512+ let buyAssetId = $t02556725717._1
513+ let buyAssetStrId = $t02556725717._2
514+ let buyAssetName = $t02556725717._3
515+ let buyAssetDecimals = $t02556725717._4
514516 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
515517 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
516518 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
517519 let allowedAllocations = min([boughtAllocations, awailableAllocations])
518520 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
519521 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
520- let $t02625826402 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521- let tokenId = $t02625826402._1
522- let tokenStrAssetId = $t02625826402._2
523- let tokenAssetName = $t02625826402._3
524- let tokenDecimals = $t02625826402._4
522+ let $t02636426508 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
523+ let tokenId = $t02636426508._1
524+ let tokenStrAssetId = $t02636426508._2
525+ let tokenAssetName = $t02636426508._3
526+ let tokenDecimals = $t02636426508._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))
587589 then throw("Only admin can call this function")
588590 else {
589591 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
590- let $t03007430224 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
591- let buyAssetId = $t03007430224._1
592- let buyAssetStrId = $t03007430224._2
593- let buyAssetName = $t03007430224._3
594- let buyAssetDecimals = $t03007430224._4
592+ let $t03018030330 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
593+ let buyAssetId = $t03018030330._1
594+ let buyAssetStrId = $t03018030330._2
595+ let buyAssetName = $t03018030330._3
596+ let buyAssetDecimals = $t03018030330._4
595597 [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
596598 }
597599
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_high_competition"
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
82-let keyHCTicketLastNumber = "_ticket_last_number"
82+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 keyUserBoughtTicketsAmount = "_bought_tickets"
8989
9090 let keyUserTickets = "_tickets_number"
9191
9292 let keyUserHCTickets = "_tickets_number_high_competition"
9393
9494 let keyUserHCBoughtTicketsAmount = "_bought_tickets_high_competition"
9595
9696 let keyUserAvailableAllocations = "_available_purchase_marketing"
9797
9898 let keyUserAmountBuyAssetInMarketing = "_purchased_buy_asset_in_marketing"
9999
100100 let keyUserBoughtAllocations = "_bought_allocations"
101101
102102 let keyUserClaimStatus = "_claim_status"
103103
104104 let keyUserWinnedTicketsAmount = "_tickets_result"
105+
106+let keyUserWinnedHighCompetitionTicketsAmount = "_tickets_result_high_competition"
105107
106108 let keyUserFreezeToken = "_freeze_token_amount"
107109
108110 let oracle = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
109111
110112 let governance = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
111113
112114 let commissionWallet = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
113115
114116 let stakingUSDNAddress = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
115117
116118 let USDN = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
117119
118120 let adminPubKeyStaking = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
119121
120122 let maxAllocationsAmount = 2
121123
122124 let isActive = valueOrElse(getBoolean(this, keyActive), true)
123125
124126 let activeLaunchpadId = valueOrElse(getIntegerValue(this, keyLaunchpadActiveId), -1)
125127
126128 func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) {
127129 case string: String =>
128130 fromBase58String(string)
129131 case nothing =>
130132 throw("Admin public key is empty")
131133 }
132134
133135
134136 let adminPubKey1 = getAdminPub(keyAdminPubKey1)
135137
136138 let adminPubKey2 = getAdminPub(keyAdminPubKey2)
137139
138140 let adminPubKey3 = getAdminPub(keyAdminPubKey3)
139141
140142 func getAssetInfo (assetId) = match assetId {
141143 case id: ByteVector =>
142144 let stringId = toBase58String(id)
143145 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
144146 $Tuple3(stringId, info.name, info.decimals)
145147 case waves: Unit =>
146148 $Tuple3("WAVES", "WAVES", 8)
147149 case _ =>
148150 throw("Match error")
149151 }
150152
151153
152154 func getLaunchpadNextId () = valueOrElse(getInteger(this, keyLaunchpadNextId), 1)
153155
154156
155157 func stakedUsdnAmount () = valueOrElse(getInteger(stakingUSDNAddress, ((("rpd_balance_" + toBase58String(USDN)) + "_") + toString(this))), 0)
156158
157159
158160 func getAssetInfoFromString (assetStr) = if ((assetStr == "WAVES"))
159161 then $Tuple4(unit, "WAVES", "WAVES", 8)
160162 else {
161163 let stringId = assetStr
162164 let id = fromBase58String(assetStr)
163165 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
164166 $Tuple4(id, stringId, info.name, info.decimals)
165167 }
166168
167169
168170 @Callable(i)
169171 func hashingRandom (launchpadId,hash) = if (!(isActive))
170172 then throw("DApp is inactive at this moment")
171173 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
172174 then throw("Only admin can call this function")
173175 else [StringEntry((toString(launchpadId) + keyVerifyHash), hash)]
174176
175177
176178
177179 @Callable(i)
178180 func initCaller (address) = if (!(isActive))
179181 then throw("DApp is inactive at this moment")
180182 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
181183 then throw("Only admin can call this function")
182184 else [StringEntry(keyInitCaller, address)]
183185
184186
185187
186188 @Callable(i)
187189 func init (projectAddress,startHeight,duration,buyToken,commission,tokensPerTicket,pricePerToken,swopfiTicketsAmount,campaignTokensAmount,tokensPerAllocation,swopPerTicket,swopFreezeDuration,claimParams,HighCompetitionSale,highCompetitionComission,highCompetitionTicketsAmount,freezeAdditionalToken,freezeParams) = if (!(isActive))
188190 then throw("DApp is inactive at this moment")
189191 else if ((toString(i.caller) != valueOrElse(getString(this, keyInitCaller), "")))
190192 then throw("Only project admin can call init function")
191193 else if ((size(i.payments) != 1))
192194 then throw("One attached payment expected")
193195 else if ((height > startHeight))
194196 then throw("Start height must be greater than blockchain height")
195197 else if (if (freezeAdditionalToken)
196198 then (size(freezeParams) != 3)
197199 else false)
198200 then throw("Freeze params list must have 3 items")
199201 else {
200202 let launchpadId = getLaunchpadNextId()
201203 let launchpadIdStr = toString(launchpadId)
202- let $t063546429 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
203- let pmtAmount = $t063546429._1
204- let pmtAssetId = $t063546429._2
205- let $t064386511 = getAssetInfo(pmtAssetId)
206- let pmtStrAssetId = $t064386511._1
207- let pmtAssetName = $t064386511._2
208- let pmtDecimals = $t064386511._3
204+ let $t064606535 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
205+ let pmtAmount = $t064606535._1
206+ let pmtAssetId = $t064606535._2
207+ let $t065446617 = getAssetInfo(pmtAssetId)
208+ let pmtStrAssetId = $t065446617._1
209+ let pmtAssetName = $t065446617._2
210+ let pmtDecimals = $t065446617._3
209211 let freezeAdditionalEntry = if (freezeAdditionalToken)
210212 then [BooleanEntry((launchpadIdStr + keyFreezeAdditionalToken), true), StringEntry((launchpadIdStr + keyFreezeTokenId), freezeParams[0]), IntegerEntry((launchpadIdStr + keyFreezeTokenDuration), parseIntValue(freezeParams[1])), IntegerEntry((launchpadIdStr + keyFreezeTokenPerTicket), parseIntValue(freezeParams[2]))]
211213 else nil
212214 ([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 + 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)
213215 }
214216
215217
216218
217219 @Callable(i)
218220 func commitSwopfiSale (launchpadId,refId) = {
219- let $t090249099 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
220- let pmtAmount = $t090249099._1
221- let pmtAssetId = $t090249099._2
222- let $t091049254 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
223- let buyAssetId = $t091049254._1
224- let buyAssetStrId = $t091049254._2
225- let buyAssetName = $t091049254._3
226- let buyAssetDecimals = $t091049254._4
221+ let $t091309205 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
222+ let pmtAmount = $t091309205._1
223+ let pmtAssetId = $t091309205._2
224+ let $t092109360 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
225+ let buyAssetId = $t092109360._1
226+ let buyAssetStrId = $t092109360._2
227+ let buyAssetName = $t092109360._3
228+ let buyAssetDecimals = $t092109360._4
227229 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
228230 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
229231 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
230232 let allowedTicketsAmount = (allowedTicketsAmountAll - boughtTicketsAmount)
231233 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
232234 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
233235 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
234236 if (!(isActive))
235237 then throw("DApp is inactive at this moment")
236238 else if ((activeLaunchpadId != launchpadId))
237239 then throw("There is no active launchpad or this launchpad is ended")
238240 else if ((startHeight > height))
239241 then throw("Launchpad sale not started yet")
240242 else if ((height > (startHeight + duration)))
241243 then throw("Launchpad sale ended")
242244 else if (if (!(freezeAdditionalToken))
243245 then if ((size(i.payments) != 1))
244246 then true
245247 else (pmtAssetId != buyAssetId)
246248 else false)
247249 then throw((("One attached payment in " + buyAssetName) + " expected"))
248250 else if (if (freezeAdditionalToken)
249251 then if ((size(i.payments) != 2))
250252 then true
251253 else (pmtAssetId != buyAssetId)
252254 else false)
253255 then {
254256 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
255257 throw(((("Two attached payments expected: First in " + buyAssetName) + ", second in ") + freezeTokenId))
256258 }
257259 else if (if ((0 >= allowedTicketsAmountAll))
258260 then true
259261 else (0 >= allowedTicketsAmount))
260262 then throw("Not enought SWOP in staking to buy tickets")
261263 else {
262264 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
263265 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
264- let $t01114211286 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
265- let tokenId = $t01114211286._1
266- let tokenStrAssetId = $t01114211286._2
267- let tokenAssetName = $t01114211286._3
268- let tokenDecimals = $t01114211286._4
266+ let $t01124811392 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
267+ let tokenId = $t01124811392._1
268+ let tokenStrAssetId = $t01124811392._2
269+ let tokenAssetName = $t01124811392._3
270+ let tokenDecimals = $t01124811392._4
269271 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
270272 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
271273 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
272274 let allowedBuyTicketAmount = min([buyTicketAmount, allowedTicketsAmount])
273275 let allowedBuyPriceWithComission = (allowedBuyTicketAmount * (ticketPrice + commissionPerTicket))
274276 let change = (pmtAmount - allowedBuyPriceWithComission)
275277 if ((buyTicketAmount == 0))
276278 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
277279 else if ((change != 0))
278280 then throw((((("Wrong payment. To buy " + toString(allowedBuyTicketAmount)) + "tickets you need to pay ") + toString(allowedBuyPriceWithComission)) + buyAssetName))
279281 else {
280282 let freezeAdditionalEntry = if (freezeAdditionalToken)
281283 then {
282284 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
283285 let freezeTokenPerTicket = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenPerTicket))
284- let $t01245012537 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
285- let pmtAmountFreeze = $t01245012537._1
286- let pmtAssetIdFreeze = $t01245012537._2
287- let $t01255412645 = getAssetInfo(pmtAssetId)
288- let pmtFreezeStrAssetId = $t01255412645._1
289- let pmtFreezeAssetName = $t01255412645._2
290- let pmtFreezeDecimals = $t01255412645._3
286+ let $t01255612643 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
287+ let pmtAmountFreeze = $t01255612643._1
288+ let pmtAssetIdFreeze = $t01255612643._2
289+ let $t01266012751 = getAssetInfo(pmtAssetId)
290+ let pmtFreezeStrAssetId = $t01266012751._1
291+ let pmtFreezeAssetName = $t01266012751._2
292+ let pmtFreezeDecimals = $t01266012751._3
291293 let needFreezeTokens = (freezeTokenPerTicket * buyTicketAmount)
292294 if (if ((pmtFreezeStrAssetId != freezeTokenId))
293295 then true
294296 else (needFreezeTokens != pmtAmountFreeze))
295297 then throw((((("You need to add " + toString(needFreezeTokens)) + " ") + pmtFreezeAssetName) + " as a second payment"))
296298 else [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), pmtAmountFreeze)]
297299 }
298300 else nil
299301 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets)), "")
300302 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyTicketLastNumber))
301303 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + allowedBuyTicketAmount)))
302304 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
303305 then ("," + boughtRange)
304306 else ("" + boughtRange)))
305307 let inv = if ((buyAssetId == USDN))
306308 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
307309 else 0
308310 if ((inv == inv))
309311 then {
310312 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)
311313 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
312314 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
313315 else baseEntry
314316 }
315317 else throw("Strict value is not equal to itself.")
316318 }
317319 }
318320 }
319321
320322
321323
322324 @Callable(i)
323325 func commitAccessListSale (launchpadId,refId) = {
324- let $t01469214767 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
325- let pmtAmount = $t01469214767._1
326- let pmtAssetId = $t01469214767._2
327- let $t01477214922 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
328- let buyAssetId = $t01477214922._1
329- let buyAssetStrId = $t01477214922._2
330- let buyAssetName = $t01477214922._3
331- let buyAssetDecimals = $t01477214922._4
326+ let $t01479814873 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
327+ let pmtAmount = $t01479814873._1
328+ let pmtAssetId = $t01479814873._2
329+ let $t01487815028 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
330+ let buyAssetId = $t01487815028._1
331+ let buyAssetStrId = $t01487815028._2
332+ let buyAssetName = $t01487815028._3
333+ let buyAssetDecimals = $t01487815028._4
332334 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing)), 0)
333335 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountBuyAssetInMarketing)), 0)
334336 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
335337 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
336338 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
337339 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
338- let $t01559115735 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
339- let tokenId = $t01559115735._1
340- let tokenStrAssetId = $t01559115735._2
341- let tokenAssetName = $t01559115735._3
342- let tokenDecimals = $t01559115735._4
340+ let $t01569715841 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
341+ let tokenId = $t01569715841._1
342+ let tokenStrAssetId = $t01569715841._2
343+ let tokenAssetName = $t01569715841._3
344+ let tokenDecimals = $t01569715841._4
343345 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
344346 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
345347 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
346348 if (!(isActive))
347349 then throw("DApp is inactive at this moment")
348350 else if ((activeLaunchpadId != launchpadId))
349351 then throw("There is no active launchpad or this launchpad is ended")
350352 else if ((startHeight > height))
351353 then throw("Launchpad sale not started yet")
352354 else if ((height > (startHeight + duration)))
353355 then throw("Launchpad sale ended")
354356 else if (if ((size(i.payments) != 1))
355357 then true
356358 else (pmtAssetId != buyAssetId))
357359 then throw((("One attached payment in " + buyAssetName) + " expected"))
358360 else if ((boughtAllocations >= maxAllocationsAmount))
359361 then throw((("You can buy only " + toString(maxAllocationsAmount)) + "allocations"))
360362 else if (if ((allocationPriceWithComission != pmtAmount))
361363 then ((allocationPriceWithComission * 2) != pmtAmount)
362364 else false)
363365 then throw(((("Wrong payment. You can buy 1 or 2 allocations for " + toString(allocationPriceWithComission)) + buyAssetName) + " per allocation"))
364366 else {
365367 let buyAllocationsAmount = (pmtAmount / allocationPriceWithComission)
366368 let inv = if ((buyAssetId == USDN))
367369 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
368370 else 0
369371 if ((inv == inv))
370372 then {
371373 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))]
372374 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
373375 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
374376 else baseEntry
375377 }
376378 else throw("Strict value is not equal to itself.")
377379 }
378380 }
379381
380382
381383
382384 @Callable(i)
383385 func commitHighCompetitionSale (launchpadId,refId) = {
384- let $t01804418119 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
385- let pmtAmount = $t01804418119._1
386- let pmtAssetId = $t01804418119._2
387- let $t01812418274 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
388- let buyAssetId = $t01812418274._1
389- let buyAssetStrId = $t01812418274._2
390- let buyAssetName = $t01812418274._3
391- let buyAssetDecimals = $t01812418274._4
386+ let $t01815018225 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
387+ let pmtAmount = $t01815018225._1
388+ let pmtAssetId = $t01815018225._2
389+ let $t01823018380 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
390+ let buyAssetId = $t01823018380._1
391+ let buyAssetStrId = $t01823018380._2
392+ let buyAssetName = $t01823018380._3
393+ let buyAssetDecimals = $t01823018380._4
392394 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
393395 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
394396 let boughtHCTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
395397 let highCompetitionSale = valueOrElse(getBoolean(this, (toString(launchpadId) + keyHighCompetitionSale)), false)
396398 if (!(isActive))
397399 then throw("DApp is inactive at this moment")
398400 else if ((activeLaunchpadId != launchpadId))
399401 then throw("There is no active launchpad or this launchpad is ended")
400402 else if (!(highCompetitionSale))
401403 then throw("There is no high competition sale for this launchpad")
402404 else if ((startHeight > height))
403405 then throw("Launchpad sale not started yet")
404406 else if ((height > (startHeight + duration)))
405407 then throw("Launchpad sale ended")
406408 else if (if ((size(i.payments) != 1))
407409 then true
408410 else (pmtAssetId != buyAssetId))
409411 then throw((("One attached payment in " + buyAssetName) + " expected"))
410412 else {
411413 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
412414 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
413- let $t01952319667 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
414- let tokenId = $t01952319667._1
415- let tokenStrAssetId = $t01952319667._2
416- let tokenAssetName = $t01952319667._3
417- let tokenDecimals = $t01952319667._4
415+ let $t01962919773 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
416+ let tokenId = $t01962919773._1
417+ let tokenStrAssetId = $t01962919773._2
418+ let tokenAssetName = $t01962919773._3
419+ let tokenDecimals = $t01962919773._4
418420 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
419421 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission)), 100)
420422 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
421423 let buyPriceWithComission = (buyTicketAmount * (ticketPrice + commissionPerTicket))
422424 let change = (pmtAmount - buyPriceWithComission)
423425 if ((buyTicketAmount == 0))
424426 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
425427 else if ((change != 0))
426428 then throw((((("Wrong payment. To buy " + toString(buyTicketAmount)) + "tickets you need to pay ") + toString(buyPriceWithComission)) + buyAssetName))
427429 else {
428430 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCTickets)), "")
429431 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyHCTicketLastNumber))
430432 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + buyTicketAmount)))
431433 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
432434 then ("," + boughtRange)
433435 else ("" + boughtRange)))
434436 let inv = if ((buyAssetId == USDN))
435437 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
436438 else 0
437439 if ((inv == inv))
438440 then {
439441 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)]
440442 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
441443 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
442444 else baseEntry
443445 }
444446 else throw("Strict value is not equal to itself.")
445447 }
446448 }
447449 }
448450
449451
450452
451453 @Callable(i)
452454 func finalise (launchpadId,vrfHeight,secretWord) = {
453455 let savedHash = getStringValue(this, (toString(launchpadId) + keyVerifyHash))
454456 let calcHash = toBase58String(sha256((toBytes(vrfHeight) + toBytes(secretWord))))
455457 if (!(isActive))
456458 then throw("DApp is inactive at this moment")
457459 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
458460 then throw("Only admin can call this function")
459461 else if ((calcHash != savedHash))
460462 then throw("vrf Height hash not matching")
461463 else {
462- let $t02245222602 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
463- let buyAssetId = $t02245222602._1
464- let buyAssetStrId = $t02245222602._2
465- let buyAssetName = $t02245222602._3
466- let buyAssetDecimals = $t02245222602._4
464+ let $t02255822708 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
465+ let buyAssetId = $t02255822708._1
466+ let buyAssetStrId = $t02255822708._2
467+ let buyAssetName = $t02255822708._3
468+ let buyAssetDecimals = $t02255822708._4
467469 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
468470 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
469471 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
470472 let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
471473 let swopfiMembersBuyAssetAmount = getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSold))
472474 let swopfiHCBuyAssetAmount = valueOrElse(getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSoldHC)), 0)
473475 let swopfiMembersComission = fraction(swopfiMembersBuyAssetAmount, commission, 100)
474476 let swopfiHCComission = fraction(swopfiHCBuyAssetAmount, commissionHC, 100)
475477 let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
476478 let marketingComission = fraction(totalAmountBuyAssetInMarketing, commission, 100)
477479 let unstakeAmount = (((((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiMembersComission) + marketingComission) + swopfiHCBuyAssetAmount) + swopfiHCComission)
478480 if ((transferedBuyAsset > (swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing)))
479481 then throw("Can't transfer negative value to project")
480482 else {
481483 let inv = if ((buyAssetId == USDN))
482484 then invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toBase58String(USDN)], nil)
483485 else 0
484486 if ((inv == inv))
485487 then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, ((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) - transferedBuyAsset), buyAssetId), ScriptTransfer(commissionWallet, ((swopfiMembersComission + marketingComission) + swopfiHCComission), buyAssetId)]
486488 else throw("Strict value is not equal to itself.")
487489 }
488490 }
489491 }
490492
491493
492494
493495 @Callable(i)
494496 func claim (launchpadId) = {
495497 let userClaimStatus = valueOrElse(getBoolean(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus)), false)
496498 let boughtTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
497499 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
498500 if (!(isActive))
499501 then throw("DApp is inactive at this moment")
500502 else if (!(isDefined(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)))))
501503 then throw("You can't claim because results are not finalized")
502504 else if (userClaimStatus)
503505 then throw("You are already claimed")
504506 else if (if ((boughtTickets == 0))
505507 then (boughtAllocations == 0)
506508 else false)
507509 then throw("You can't claim because you don't buy anything")
508510 else {
509- let $t02546125611 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
510- let buyAssetId = $t02546125611._1
511- let buyAssetStrId = $t02546125611._2
512- let buyAssetName = $t02546125611._3
513- let buyAssetDecimals = $t02546125611._4
511+ let $t02556725717 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
512+ let buyAssetId = $t02556725717._1
513+ let buyAssetStrId = $t02556725717._2
514+ let buyAssetName = $t02556725717._3
515+ let buyAssetDecimals = $t02556725717._4
514516 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
515517 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
516518 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
517519 let allowedAllocations = min([boughtAllocations, awailableAllocations])
518520 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
519521 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
520- let $t02625826402 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521- let tokenId = $t02625826402._1
522- let tokenStrAssetId = $t02625826402._2
523- let tokenAssetName = $t02625826402._3
524- let tokenDecimals = $t02625826402._4
522+ let $t02636426508 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
523+ let tokenId = $t02636426508._1
524+ let tokenStrAssetId = $t02636426508._2
525+ let tokenAssetName = $t02636426508._3
526+ let tokenDecimals = $t02636426508._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))
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 if (if ((0 > buyAssetForAllocations))
532534 then true
533535 else (0 > buyAssetForUnwonnedTickets))
534536 then throw("Error with allowed allocation param or wonned tickets param please contact support")
535537 else {
536538 let returnedBuyAssetAmount = (buyAssetForUnwonnedTickets + buyAssetForUnwonnedTickets)
537539 let transferUsdn = if ((returnedBuyAssetAmount > 0))
538540 then [ScriptTransfer(i.caller, returnedBuyAssetAmount, buyAssetId)]
539541 else nil
540542 let transferTokens = if ((transferTokensAmount > 0))
541543 then [ScriptTransfer(i.caller, transferTokensAmount, tokenId)]
542544 else nil
543545 let inv = if (if ((returnedBuyAssetAmount > 0))
544546 then (buyAssetId == USDN)
545547 else false)
546548 then invoke(stakingUSDNAddress, "unlockNeutrino", [returnedBuyAssetAmount, toBase58String(USDN)], nil)
547549 else 0
548550 if ((inv == inv))
549551 then (([BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true)] ++ transferTokens) ++ transferUsdn)
550552 else throw("Strict value is not equal to itself.")
551553 }
552554 }
553555 }
554556
555557
556558
557559 @Callable(i)
558560 func claimFreezeToken (launchpadId) = {
559561 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
560562 if (!(isActive))
561563 then throw("DApp is inactive at this moment")
562564 else if (!(isDefined(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)))))
563565 then throw("You can't claim because results are not finalized")
564566 else if (!(freezeAdditionalToken))
565567 then throw("There are no additional token freezing for this launchpad")
566568 else {
567569 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyFreezeTokenId)))
568570 let userTokensFreezed = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken)), 0)
569571 let startHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyStartHeight)), 0)
570572 let duration = valueOrElse(getInteger(this, (toString(launchpadId) + keyDuration)), 0)
571573 let freezeTokenDuration = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenDuration))
572574 let blockEndHeight = ((startHeight + duration) + freezeTokenDuration)
573575 if ((userTokensFreezed == 0))
574576 then throw("You are already claimed your tokens or not paid anything")
575577 else if ((blockEndHeight > height))
576578 then throw(("Your tokens freezed teel " + toString(blockEndHeight)))
577579 else [ScriptTransfer(i.caller, userTokensFreezed, tokenId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), 0)]
578580 }
579581 }
580582
581583
582584
583585 @Callable(i)
584586 func transferBuyAsset (launchpadId,amount) = if (!(isActive))
585587 then throw("DApp is inactive")
586588 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
587589 then throw("Only admin can call this function")
588590 else {
589591 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
590- let $t03007430224 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
591- let buyAssetId = $t03007430224._1
592- let buyAssetStrId = $t03007430224._2
593- let buyAssetName = $t03007430224._3
594- let buyAssetDecimals = $t03007430224._4
592+ let $t03018030330 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
593+ let buyAssetId = $t03018030330._1
594+ let buyAssetStrId = $t03018030330._2
595+ let buyAssetName = $t03018030330._3
596+ let buyAssetDecimals = $t03018030330._4
595597 [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
596598 }
597599
598600
599601
600602 @Callable(i)
601603 func shutdown () = if (!(isActive))
602604 then throw("DApp already inactive")
603605 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
604606 then throw("Only admin can call this function")
605607 else [BooleanEntry(keyActive, false)]
606608
607609
608610
609611 @Callable(i)
610612 func activate () = if (isActive)
611613 then throw("DApp already active")
612614 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
613615 then throw("Only admin can call this function")
614616 else [BooleanEntry(keyActive, true)]
615617
616618
617619 @Verifier(tx)
618620 func verify () = {
619621 let multiSignedByAdmins = {
620622 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
621623 then 1
622624 else 0
623625 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
624626 then 1
625627 else 0
626628 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
627629 then 1
628630 else 0
629631 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
630632 }
631633 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
632634 then true
633635 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
634636 then true
635637 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
636638 then true
637639 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKeyStaking)
638640 match tx {
639641 case dtx: DataTransaction =>
640642 if (valueOrElse(getBoolean(oracle, keyLaunchpadDataTransactionStatus), false))
641643 then signedByAdmin
642644 else false
643645 case _ =>
644646 multiSignedByAdmins
645647 }
646648 }
647649

github/deemru/w8io/169f3d6 
172.15 ms