tx · DY7MKkABKfTiV8XzFkqjR1RNnAw25S7FwSQnrGPjGaHq

3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi:  -0.01400000 Waves

2021.12.17 18:19 [1838431] smart account 3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi > SELF 0.00000000 Waves

{ "type": 13, "id": "DY7MKkABKfTiV8XzFkqjR1RNnAw25S7FwSQnrGPjGaHq", "fee": 1400000, "feeAssetId": null, "timestamp": 1639754355415, "version": 2, "chainId": 84, "sender": "3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi", "senderPublicKey": "FRotxVW1MhTQRDvVbMM4yvYGWzBFvHqvMsonvGeEXQUy", "proofs": [ "TuGKfwVo1vuPkQsBkifFmi5rFFRAnkFCheDJNRJ1bCCGuaJ6z19VzzZTDFoZRVrCqFQ8AkDB8mUogndPVecRn1g", "5yAnLhw1aUQzCk1AyaqQvDbXEU8GjwHm5qsrvurdLu3HGkDAQdAHYHeS748xBqosRN66jnC2Fs26jpkyT9kSrK2i" ], "script": "base64:AAIFAAAAAAAAEuUIAhIECgIBCBIDCgEIEhQKEggBAQgBAQEBAQEBARgEAQEEGBIECgIBCBIECgIBCBIECgIBCBIFCgMBAQgSAwoBARIDCgEBEgQKAgEBEgASABoaCgFBEhVrZXlIQ1RpY2tldExhc3ROdW1iZXIaGAoBQhITa2V5R292ZXJuYW5jZVN0YWtlZBoRCgFDEgxrZXlVc2VyUmVmSWQaEgoBRBINa2V5VmVyaWZ5SGFzaBoQCgFFEgtrZXlEdXJhdGlvbhohCgFGEhxrZXlBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGioKAUcSJWtleUFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmdGaW5hbGl6ZWQaGAoBSBITa2V5VHJhbnNmZXJCdXlBc3NldBoZCgFJEhRrZXlGcmVlelN3b3BEdXJhdGlvbhobCgFKEhZrZXlIaWdoQ29tcGV0aXRpb25TYWxlGh0KAUsSGGtleUZyZWV6ZUFkZGl0aW9uYWxUb2tlbhoVCgFMEhBrZXlGcmVlemVUb2tlbklkGhsKAU0SFmtleUZyZWV6ZVRva2VuRHVyYXRpb24aHAoBThIXa2V5RnJlZXplVG9rZW5QZXJUaWNrZXQaEAoBTxILa2V5QnV5VG9rZW4aEwoBUBIOa2V5Q2xhaW1QYXJhbXMaHwoBURIaa2V5VXNlckJvdWdodFRpY2tldHNBbW91bnQaIQoBUhIca2V5VXNlckhDQm91Z2h0VGlja2V0c0Ftb3VudBoTCgFTEg5rZXlVc2VyVGlja2V0cxoVCgFUEhBrZXlVc2VySENUaWNrZXRzGiAKAVUSG2tleVVzZXJBdmFpbGFibGVBbGxvY2F0aW9ucxolCgFWEiBrZXlVc2VyQW1vdW50QnV5QXNzZXRJbk1hcmtldGluZxodCgFXEhhrZXlVc2VyQm91Z2h0QWxsb2NhdGlvbnMaFwoBWBISa2V5VXNlckNsYWltU3RhdHVzGh8KAVkSGmtleVVzZXJXaW5uZWRUaWNrZXRzQW1vdW50GhcKAVoSEmtleVVzZXJGcmVlemVUb2tlbhoOCgFhEglrZXlBY3RpdmUaDgoCYUESCGFzc2V0U3RyGgcKAmFCEgFpGhEKAmFDEgtsYXVuY2hwYWRJZBoKCgJhRBIEaGFzaBoNCgJhRRIHYWRkcmVzcxoUCgJhRhIOcHJvamVjdEFkZHJlc3MaEQoCYUcSC3N0YXJ0SGVpZ2h0Gg4KAmFIEghkdXJhdGlvbhoOCgJhSRIIYnV5VG9rZW4aEAoCYUoSCmNvbW1pc3Npb24aFQoCYUsSD3Rva2Vuc1BlclRpY2tldBoTCgJhTBINcHJpY2VQZXJUb2tlbhoZCgJhTRITc3dvcGZpVGlja2V0c0Ftb3VudBoaCgJhThIUY2FtcGFpZ25Ub2tlbnNBbW91bnQaGQoCYU8SE3Rva2Vuc1BlckFsbG9jYXRpb24aEwoCYVASDXN3b3BQZXJUaWNrZXQaGAoCYVESEnN3b3BGcmVlemVEdXJhdGlvbhoRCgJhUhILY2xhaW1QYXJhbXMaGQoCYVMSE0hpZ2hDb21wZXRpdGlvblNhbGUaHgoCYVQSGGhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbhoiCgJhVRIcaGlnaENvbXBldGl0aW9uVGlja2V0c0Ftb3VudBobCgJhVhIVZnJlZXplQWRkaXRpb25hbFRva2VuGhIKAmFXEgxmcmVlemVQYXJhbXMaFAoCYVgSDmxhdW5jaHBhZElkU3RyGhEKAmFZEgskdDA2MzM2NjQxMRoPCgJhWhIJcG10QW1vdW50GgwKAmFhEgZvcmFjbGUaEAoCYWISCmdvdmVybmFuY2UaFgoCYWMSEGNvbW1pc3Npb25XYWxsZXQaGAoCYWQSEnN0YWtpbmdVU0ROQWRkcmVzcxoKCgJhZRIEVVNEThoYCgJhZhISYWRtaW5QdWJLZXlTdGFraW5nGhoKAmFnEhRtYXhBbGxvY2F0aW9uc0Ftb3VudBoOCgJhaBIIaXNBY3RpdmUaFwoCYWkSEWFjdGl2ZUxhdW5jaHBhZElkGhEKAmFqEgtnZXRBZG1pblB1YhoRCgJhaxILa2V5QWRtaW5QdWIaDQoCYWwSByRtYXRjaDAaDAoCYW0SBnN0cmluZxoNCgJhbhIHbm90aGluZxoSCgJhbxIMYWRtaW5QdWJLZXkxGhIKAmFwEgxhZG1pblB1YktleTIaEgoCYXESDGFkbWluUHViS2V5MxoSCgJhchIMZ2V0QXNzZXRJbmZvGg0KAmFzEgdhc3NldElkGggKAmF0EgJpZBoOCgJhdRIIc3RyaW5nSWQaCgoCYXYSBGluZm8aCwoCYXcSBXdhdmVzGhgKAmF4EhJnZXRMYXVuY2hwYWROZXh0SWQaFgoCYXkSEHN0YWtlZFVzZG5BbW91bnQaHAoCYXoSFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcaFAoBYhIPa2V5QWRtaW5QdWJLZXkxGhUKAmJBEg9idXlUaWNrZXRBbW91bnQaHAoCYkISFmFsbG93ZWRCdXlUaWNrZXRBbW91bnQaIgoCYkMSHGFsbG93ZWRCdXlQcmljZVdpdGhDb21pc3Npb24aDAoCYkQSBmNoYW5nZRoaCgJiRRIUZnJlZXplVG9rZW5QZXJUaWNrZXQaEwoCYkYSDSR0MDEyNDE5MTI1MDYaFQoCYkcSD3BtdEFtb3VudEZyZWV6ZRoWCgJiSBIQcG10QXNzZXRJZEZyZWV6ZRoTCgJiSRINJHQwMTI1MjMxMjYxNBoZCgJiShITcG10RnJlZXplU3RyQXNzZXRJZBoYCgJiSxIScG10RnJlZXplQXNzZXROYW1lGhcKAmJMEhFwbXRGcmVlemVEZWNpbWFscxoWCgJiTRIQbmVlZEZyZWV6ZVRva2VucxoeCgJiThIYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzGhwKAmJPEhZsYXN0Qm91Z2h0VGlja2V0TnVtYmVyGhEKAmJQEgtib3VnaHRSYW5nZRohCgJiURIbbmV3VXNlckJvdWdodFRpY2tldHNOdW1iZXJzGgkKAmJSEgNpbnYaDwoCYlMSCWJhc2VFbnRyeRoTCgJiVBINJHQwMTQ2NjExNDczNhoTCgJiVRINJHQwMTQ3NDExNDg5MRoZCgJiVhITdXNlclVzZG5Jbk1hcmtldGluZxoVCgJiVxIPdXNkbkluTWFya2V0aW5nGhcKAmJYEhFib3VnaHRBbGxvY2F0aW9ucxoTCgJiWRINJHQwMTU1NjAxNTcwNBoiCgJiWhIcYWxsb2NhdGlvblByaWNlV2l0aENvbWlzc2lvbhoQCgJiYRIKcG10QXNzZXRJZBoRCgJiYhILJHQwNjQyMDY0OTMaEwoCYmMSDXBtdFN0ckFzc2V0SWQaEgoCYmQSDHBtdEFzc2V0TmFtZRoRCgJiZRILcG10RGVjaW1hbHMaGwoCYmYSFWZyZWV6ZUFkZGl0aW9uYWxFbnRyeRoLCgJiZxIFcmVmSWQaEQoCYmgSCyR0MDg5OTM5MDY4GhEKAmJpEgskdDA5MDczOTIyMxoQCgJiahIKYnV5QXNzZXRJZBoTCgJiaxINYnV5QXNzZXRTdHJJZBoSCgJibBIMYnV5QXNzZXROYW1lGhYKAmJtEhBidXlBc3NldERlY2ltYWxzGhEKAmJuEgtzdGFrZWRTd29wcxodCgJibxIXYWxsb3dlZFRpY2tldHNBbW91bnRBbGwaGQoCYnASE2JvdWdodFRpY2tldHNBbW91bnQaGgoCYnESFGFsbG93ZWRUaWNrZXRzQW1vdW50GhMKAmJyEg1mcmVlemVUb2tlbklkGhAKAmJzEgp0b2tlblByaWNlGhMKAmJ0Eg0kdDAxMTExMTExMjU1Gg0KAmJ1Egd0b2tlbklkGhUKAmJ2Eg90b2tlblN0ckFzc2V0SWQaFAoCYncSDnRva2VuQXNzZXROYW1lGhMKAmJ4Eg10b2tlbkRlY2ltYWxzGhEKAmJ5Egt0aWNrZXRQcmljZRoZCgJiehITY29tbWlzc2lvblBlclRpY2tldBoUCgFjEg9rZXlBZG1pblB1YktleTIaGAoCY0ESEmFsbG93ZWRBbGxvY2F0aW9ucxoTCgJjQhINJHQwMjYyMjcyNjM3MRoaCgJjQxIUdHJhbnNmZXJUb2tlbnNBbW91bnQaIQoCY0QSG25vdEFsbG93ZWRBbGxvY2F0aW9uc1Rva2VucxocCgJjRRIWYnV5QXNzZXRGb3JBbGxvY2F0aW9ucxogCgJjRhIaYnV5QXNzZXRGb3JVbndvbm5lZFRpY2tldHMaHAoCY0cSFnJldHVybmVkQnV5QXNzZXRBbW91bnQaEgoCY0gSDHRyYW5zZmVyVXNkbhoUCgJjSRIOdHJhbnNmZXJUb2tlbnMaFwoCY0oSEXVzZXJUb2tlbnNGcmVlemVkGhkKAmNLEhNmcmVlemVUb2tlbkR1cmF0aW9uGhQKAmNMEg5ibG9ja0VuZEhlaWdodBoMCgJjTRIGYW1vdW50GhMKAmNOEg0kdDAzMDA0MzMwMTkzGggKAmNPEgJ0eBoMCgJjUBIGdmVyaWZ5GhkKAmNREhNtdWx0aVNpZ25lZEJ5QWRtaW5zGhgKAmNSEhJhZG1pblB1YktleTFTaWduZWQaGAoCY1MSEmFkbWluUHViS2V5MlNpZ25lZBoYCgJjVBISYWRtaW5QdWJLZXkzU2lnbmVkGhMKAmNVEg1zaWduZWRCeUFkbWluGgkKAmNWEgNkdHgaGgoCY2ESFGJ1eUFsbG9jYXRpb25zQW1vdW50GhMKAmNiEg0kdDAxODAxMzE4MDg4GhMKAmNjEg0kdDAxODA5MzE4MjQzGhsKAmNkEhVib3VnaHRIQ1RpY2tldHNBbW91bnQaGQoCY2USE2hpZ2hDb21wZXRpdGlvblNhbGUaEwoCY2YSDSR0MDE5NDkyMTk2MzYaGwoCY2cSFWJ1eVByaWNlV2l0aENvbWlzc2lvbhoPCgJjaBIJdnJmSGVpZ2h0GhAKAmNpEgpzZWNyZXRXb3JkGg8KAmNqEglzYXZlZEhhc2gaDgoCY2sSCGNhbGNIYXNoGhMKAmNsEg0kdDAyMjQyMTIyNTcxGhIKAmNtEgxjb21taXNzaW9uSEMaGAoCY24SEnRyYW5zZmVyZWRCdXlBc3NldBohCgJjbxIbc3dvcGZpTWVtYmVyc0J1eUFzc2V0QW1vdW50GhwKAmNwEhZzd29wZmlIQ0J1eUFzc2V0QW1vdW50GhwKAmNxEhZzd29wZmlNZW1iZXJzQ29taXNzaW9uGhcKAmNyEhFzd29wZmlIQ0NvbWlzc2lvbhokCgJjcxIedG90YWxBbW91bnRCdXlBc3NldEluTWFya2V0aW5nGhgKAmN0EhJtYXJrZXRpbmdDb21pc3Npb24aEwoCY3USDXVuc3Rha2VBbW91bnQaFQoCY3YSD3VzZXJDbGFpbVN0YXR1cxoTCgJjdxINYm91Z2h0VGlja2V0cxoTCgJjeBINJHQwMjU0MzAyNTU4MBoTCgJjeRINd29ubmVkVGlja2V0cxoaCgJjehIUYXdhaWxhYmxlQWxsb2NhdGlvbnMaFAoBZBIPa2V5QWRtaW5QdWJLZXkzGiYKAWUSIWtleUxhdW5jaHBhZERhdGFUcmFuc2FjdGlvblN0YXR1cxoXCgFmEhJrZXlMYXVuY2hwYWROZXh0SWQaGQoBZxIUa2V5TGF1bmNocGFkQWN0aXZlSWQaEgoBaBINa2V5SW5pdENhbGxlchoPCgFpEgprZXlBZGRyZXNzGhIKAWoSDWtleUluaXRIZWlnaHQaEwoBaxIOa2V5U3RhcnRIZWlnaHQaFgoBbBIRa2V5RmluYWxpc2VIZWlnaHQaEQoBbRIMa2V5Q29taXNzaW9uGiAKAW4SG2tleUhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbhoPCgFvEgprZXlBc3NldElkGhgKAXASE2tleVRvdGFsVG9rZW5BbW91bnQaHwoBcRIaa2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGQaIQoBchIca2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGRIQxoXCgFzEhJrZXlUb2tlbnNQZXJUaWNrZXQaFQoBdBIQa2V5UHJpY2VQZXJUb2tlbhoVCgF1EhBrZXlTd29wUGVyVGlja2V0GhsKAXYSFmtleVN3b3BmaVRpY2tldHNBbW91bnQaEAoBdxILa2V5SENBbW91bnQaHAoBeBIXa2V5Q2FtcGFpZ25Ub2tlbnNBbW91bnQaGwoBeRIWa2V5VG9rZW5zUGVyQWxsb2NhdGlvbhoYCgF6EhNrZXlUaWNrZXRMYXN0TnVtYmVyAAAARQAAAAABYQIAAAAGYWN0aXZlAAAAAAFiAgAAAAthZG1pbl9wdWJfMQAAAAABYwIAAAALYWRtaW5fcHViXzIAAAAAAWQCAAAAC2FkbWluX3B1Yl8zAAAAAAFlAgAAACFsYXVuY2hwYWRfZGF0YV90cmFuc2FjdGlvbl9zdGF0dXMAAAAAAWYCAAAAEWxhdW5jaHBhZF9uZXh0X2lkAAAAAAFnAgAAABNsYXVuY2hwYWRfYWN0aXZlX2lkAAAAAAFoAgAAAAtpbml0X2NhbGxlcgAAAAABaQIAAAAIX2FkZHJlc3MAAAAAAWoCAAAADF9pbml0X2hlaWdodAAAAAABawIAAAANX3N0YXJ0X2hlaWdodAAAAAABbAIAAAAQX2ZpbmFsaXNlX2hlaWdodAAAAAABbQIAAAAKX2NvbWlzc2lvbgAAAAABbgIAAAAbX2hpZ2hfY29tcGV0aXRpb25fY29taXNzaW9uAAAAAAFvAgAAAAlfYXNzZXRfaWQAAAAAAXACAAAAE190b3RhbF90b2tlbl9hbW91bnQAAAAAAXECAAAAFV90b3RhbF9idXlfYXNzZXRfc29sZAAAAAABcgIAAAAmX3RvdGFsX2J1eV9hc3NldF9zb2xkX2hpZ2hfY29tcGV0aXRpb24AAAAAAXMCAAAAEl90b2tlbnNfcGVyX3RpY2tldAAAAAABdAIAAAAQX3ByaWNlX3Blcl90b2tlbgAAAAABdQIAAAAQX3N3b3BfcGVyX3RpY2tldAAAAAABdgIAAAAXX3RpY2tldHNfc3dvcGZpX21lbWJlcnMAAAAAAXcCAAAAGV90aWNrZXRzX2hpZ2hfY29tcGV0aXRpb24AAAAAAXgCAAAAE190b2tlbnNfYWNjZXNzX2xpc3QAAAAAAXkCAAAAFl90b2tlbnNfcGVyX2FsbG9jYXRpb24AAAAAAXoCAAAAJF90aWNrZXRfbGFzdF9udW1iZXJfaGlnaF9jb21wZXRpdGlvbgAAAAABQQIAAAATX3RpY2tldF9sYXN0X251bWJlcgAAAAABQgIAAAAMX1NXT1BfYW1vdW50AAAAAAFDAgAAAAdfcmVmX2lkAAAAAAFEAgAAAAxfdmVyaWZ5X2hhc2gAAAAAAUUCAAAACV9kdXJhdGlvbgAAAAABRgIAAAAnX3RvdGFsX3B1cmNoYXNlZF9idXlfYXNzZXRfaW5fbWFya2V0aW5nAAAAAAFHAgAAADFfdG90YWxfcHVyY2hhc2VkX2J1eV9hc3NldF9pbl9tYXJrZXRpbmdfZmluYWxpemVkAAAAAAFIAgAAABNfdHJhbnNmZXJfYnV5X2Fzc2V0AAAAAAFJAgAAABVfZnJlZXplX3N3b3BfZHVyYXRpb24AAAAAAUoCAAAAFl9oaWdoX2NvbXBldGl0aW9uX3NhbGUAAAAAAUsCAAAAGF9mcmVlemVfYWRkaXRpb25hbF90b2tlbgAAAAABTAIAAAAQX2ZyZWV6ZV90b2tlbl9pZAAAAAABTQIAAAAWX2ZyZWV6ZV90b2tlbl9kdXJhdGlvbgAAAAABTgIAAAAYX2ZyZWV6ZV90b2tlbl9wZXJfdGlja2V0AAAAAAFPAgAAAApfYnV5X3Rva2VuAAAAAAFQAgAAAA1fY2xhaW1fcGFyYW1zAAAAAAFRAgAAAA9fYm91Z2h0X3RpY2tldHMAAAAAAVICAAAAIF9ib3VnaHRfdGlja2V0c19oaWdoX2NvbXBldGl0aW9uAAAAAAFTAgAAAA9fdGlja2V0c19udW1iZXIAAAAAAVQCAAAAIF90aWNrZXRzX251bWJlcl9oaWdoX2NvbXBldGl0aW9uAAAAAAFVAgAAAB1fYXZhaWxhYmxlX3B1cmNoYXNlX21hcmtldGluZwAAAAABVgIAAAAhX3B1cmNoYXNlZF9i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", "height": 1838431, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5DJKTBUbZTpSd8zzPtqirMmNwaKcB2TyakNtmBrqe2tf Next: 7K6iXKEfk8RBPq9UtDa8F1z3uBBPk3jyboN4R91XzEJC Diff:
OldNewDifferences
2727
2828 let keyComission = "_comission"
2929
30+let keyHighCompetitionComission = "_high_competition_comission"
31+
3032 let keyAssetId = "_asset_id"
3133
3234 let keyTotalTokenAmount = "_total_token_amount"
3335
3436 let keyTotalAmountBuyAssetSold = "_total_buy_asset_sold"
37+
38+let keyTotalAmountBuyAssetSoldHC = "_total_buy_asset_sold_high_competition"
3539
3640 let keyTokensPerTicket = "_tokens_per_ticket"
3741
4145
4246 let keySwopfiTicketsAmount = "_tickets_swopfi_members"
4347
48+let keyHCAmount = "_tickets_high_competition"
49+
4450 let keyCampaignTokensAmount = "_tokens_access_list"
4551
4652 let keyTokensPerAllocation = "_tokens_per_allocation"
4753
4854 let keyTicketLastNumber = "_ticket_last_number_high_competition"
55+
56+let keyHCTicketLastNumber = "_ticket_last_number"
4957
5058 let keyGovernanceStaked = "_SWOP_amount"
5159
6371
6472 let keyFreezSwopDuration = "_freeze_swop_duration"
6573
74+let keyHighCompetitionSale = "_high_competition_sale"
75+
6676 let keyFreezeAdditionalToken = "_freeze_additional_token"
6777
6878 let keyFreezeTokenId = "_freeze_token_id"
7585
7686 let keyClaimParams = "_claim_params"
7787
78-let keyHighCompetitionComission = "_high_competition_comission"
88+let keyUserBoughtTicketsAmount = "_bought_tickets"
7989
80-let keyHighCompetitionSale = "_high_competition_sale"
81-
82-let keyHCTicketLastNumber = "_high_competition_ticket_last_number"
83-
84-let keyHighCompetitionAmount = "_tickets_high_competition"
85-
86-let keyTotalAmountBuyAssetSoldHC = "_total_buy_asset_sold_high_competition"
87-
88-let keyUserBoughtTicketsAmount = "_bought_tickets"
90+let keyUserHCBoughtTicketsAmount = "_bought_tickets_high_competition"
8991
9092 let keyUserTickets = "_tickets_number"
9193
9294 let keyUserHCTickets = "_tickets_number_high_competition"
93-
94-let keyUserHCBoughtTicketsAmount = "_bought_tickets_high_competition"
9595
9696 let keyUserAvailableAllocations = "_available_purchase_marketing"
9797
103103
104104 let keyUserWinnedTicketsAmount = "_tickets_result"
105105
106-let keyUserWinnedHighCompetitionTicketsAmount = "_tickets_result_high_competition"
107-
108106 let keyUserFreezeToken = "_freeze_token_amount"
109107
110108 let oracle = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
111109
112110 let governance = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
113111
114-let commissionWallet = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
112+let commissionWallet = Address(base58'3PGYafJ2GuqPckmZNywet8moiPnBHz51Xdg')
115113
116-let stakingUSDNAddress = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
114+let stakingUSDNAddress = Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ')
117115
118-let USDN = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
116+let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
119117
120-let adminPubKeyStaking = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
118+let adminPubKeyStaking = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
121119
122120 let maxAllocationsAmount = 2
123121
201199 else {
202200 let launchpadId = getLaunchpadNextId()
203201 let launchpadIdStr = toString(launchpadId)
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
202+ let $t063366411 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
203+ let pmtAmount = $t063366411._1
204+ let pmtAssetId = $t063366411._2
205+ let $t064206493 = getAssetInfo(pmtAssetId)
206+ let pmtStrAssetId = $t064206493._1
207+ let pmtAssetName = $t064206493._2
208+ let pmtDecimals = $t064206493._3
211209 let freezeAdditionalEntry = if (freezeAdditionalToken)
212210 then [BooleanEntry((launchpadIdStr + keyFreezeAdditionalToken), true), StringEntry((launchpadIdStr + keyFreezeTokenId), freezeParams[0]), IntegerEntry((launchpadIdStr + keyFreezeTokenDuration), parseIntValue(freezeParams[1])), IntegerEntry((launchpadIdStr + keyFreezeTokenPerTicket), parseIntValue(freezeParams[2]))]
213211 else nil
214- ([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)
212+ ([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 + keyHighCompetitionComission), highCompetitionComission), 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 + keyHCAmount), highCompetitionTicketsAmount), IntegerEntry((launchpadIdStr + keyTokensPerAllocation), tokensPerAllocation), StringEntry((launchpadIdStr + keyClaimParams), makeString(claimParams, ",")), BooleanEntry((launchpadIdStr + keyHighCompetitionSale), HighCompetitionSale), IntegerEntry(keyLaunchpadActiveId, launchpadId), StringEntry(keyInitCaller, "")] ++ freezeAdditionalEntry)
215213 }
216214
217215
218216
219217 @Callable(i)
220218 func commitSwopfiSale (launchpadId,refId) = {
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
219+ let $t089939068 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
220+ let pmtAmount = $t089939068._1
221+ let pmtAssetId = $t089939068._2
222+ let $t090739223 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
223+ let buyAssetId = $t090739223._1
224+ let buyAssetStrId = $t090739223._2
225+ let buyAssetName = $t090739223._3
226+ let buyAssetDecimals = $t090739223._4
229227 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
230228 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
231229 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
263261 else {
264262 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
265263 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
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
264+ let $t01111111255 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
265+ let tokenId = $t01111111255._1
266+ let tokenStrAssetId = $t01111111255._2
267+ let tokenAssetName = $t01111111255._3
268+ let tokenDecimals = $t01111111255._4
271269 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
272270 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
273271 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
283281 then {
284282 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
285283 let freezeTokenPerTicket = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenPerTicket))
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
284+ let $t01241912506 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
285+ let pmtAmountFreeze = $t01241912506._1
286+ let pmtAssetIdFreeze = $t01241912506._2
287+ let $t01252312614 = getAssetInfo(pmtAssetId)
288+ let pmtFreezeStrAssetId = $t01252312614._1
289+ let pmtFreezeAssetName = $t01252312614._2
290+ let pmtFreezeDecimals = $t01252312614._3
293291 let needFreezeTokens = (freezeTokenPerTicket * buyTicketAmount)
294292 if (if ((pmtFreezeStrAssetId != freezeTokenId))
295293 then true
323321
324322 @Callable(i)
325323 func commitAccessListSale (launchpadId,refId) = {
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
324+ let $t01466114736 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
325+ let pmtAmount = $t01466114736._1
326+ let pmtAssetId = $t01466114736._2
327+ let $t01474114891 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
328+ let buyAssetId = $t01474114891._1
329+ let buyAssetStrId = $t01474114891._2
330+ let buyAssetName = $t01474114891._3
331+ let buyAssetDecimals = $t01474114891._4
334332 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing)), 0)
335333 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountBuyAssetInMarketing)), 0)
336334 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
337335 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
338336 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
339337 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
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
338+ let $t01556015704 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
339+ let tokenId = $t01556015704._1
340+ let tokenStrAssetId = $t01556015704._2
341+ let tokenAssetName = $t01556015704._3
342+ let tokenDecimals = $t01556015704._4
345343 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
346344 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
347345 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
383381
384382 @Callable(i)
385383 func commitHighCompetitionSale (launchpadId,refId) = {
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
384+ let $t01801318088 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
385+ let pmtAmount = $t01801318088._1
386+ let pmtAssetId = $t01801318088._2
387+ let $t01809318243 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
388+ let buyAssetId = $t01809318243._1
389+ let buyAssetStrId = $t01809318243._2
390+ let buyAssetName = $t01809318243._3
391+ let buyAssetDecimals = $t01809318243._4
394392 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
395393 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
396394 let boughtHCTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
412410 else {
413411 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
414412 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
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
413+ let $t01949219636 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
414+ let tokenId = $t01949219636._1
415+ let tokenStrAssetId = $t01949219636._2
416+ let tokenAssetName = $t01949219636._3
417+ let tokenDecimals = $t01949219636._4
420418 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
421419 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission)), 100)
422420 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
461459 else if ((calcHash != savedHash))
462460 then throw("vrf Height hash not matching")
463461 else {
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
462+ let $t02242122571 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
463+ let buyAssetId = $t02242122571._1
464+ let buyAssetStrId = $t02242122571._2
465+ let buyAssetName = $t02242122571._3
466+ let buyAssetDecimals = $t02242122571._4
469467 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
470468 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
471469 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
508506 else false)
509507 then throw("You can't claim because you don't buy anything")
510508 else {
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
509+ let $t02543025580 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
510+ let buyAssetId = $t02543025580._1
511+ let buyAssetStrId = $t02543025580._2
512+ let buyAssetName = $t02543025580._3
513+ let buyAssetDecimals = $t02543025580._4
516514 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
517515 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
518516 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
519517 let allowedAllocations = min([boughtAllocations, awailableAllocations])
520518 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
521519 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
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
520+ let $t02622726371 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521+ let tokenId = $t02622726371._1
522+ let tokenStrAssetId = $t02622726371._2
523+ let tokenAssetName = $t02622726371._3
524+ let tokenDecimals = $t02622726371._4
527525 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
528526 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
529527 let transferTokensAmount = ((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation))
589587 then throw("Only admin can call this function")
590588 else {
591589 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
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
590+ let $t03004330193 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
591+ let buyAssetId = $t03004330193._1
592+ let buyAssetStrId = $t03004330193._2
593+ let buyAssetName = $t03004330193._3
594+ let buyAssetDecimals = $t03004330193._4
597595 [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
598596 }
599597
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
30+let keyHighCompetitionComission = "_high_competition_comission"
31+
3032 let keyAssetId = "_asset_id"
3133
3234 let keyTotalTokenAmount = "_total_token_amount"
3335
3436 let keyTotalAmountBuyAssetSold = "_total_buy_asset_sold"
37+
38+let keyTotalAmountBuyAssetSoldHC = "_total_buy_asset_sold_high_competition"
3539
3640 let keyTokensPerTicket = "_tokens_per_ticket"
3741
3842 let keyPricePerToken = "_price_per_token"
3943
4044 let keySwopPerTicket = "_swop_per_ticket"
4145
4246 let keySwopfiTicketsAmount = "_tickets_swopfi_members"
4347
48+let keyHCAmount = "_tickets_high_competition"
49+
4450 let keyCampaignTokensAmount = "_tokens_access_list"
4551
4652 let keyTokensPerAllocation = "_tokens_per_allocation"
4753
4854 let keyTicketLastNumber = "_ticket_last_number_high_competition"
55+
56+let keyHCTicketLastNumber = "_ticket_last_number"
4957
5058 let keyGovernanceStaked = "_SWOP_amount"
5159
5260 let keyUserRefId = "_ref_id"
5361
5462 let keyVerifyHash = "_verify_hash"
5563
5664 let keyDuration = "_duration"
5765
5866 let keyAmountBuyAssetInMarketing = "_total_purchased_buy_asset_in_marketing"
5967
6068 let keyAmountBuyAssetInMarketingFinalized = "_total_purchased_buy_asset_in_marketing_finalized"
6169
6270 let keyTransferBuyAsset = "_transfer_buy_asset"
6371
6472 let keyFreezSwopDuration = "_freeze_swop_duration"
6573
74+let keyHighCompetitionSale = "_high_competition_sale"
75+
6676 let keyFreezeAdditionalToken = "_freeze_additional_token"
6777
6878 let keyFreezeTokenId = "_freeze_token_id"
6979
7080 let keyFreezeTokenDuration = "_freeze_token_duration"
7181
7282 let keyFreezeTokenPerTicket = "_freeze_token_per_ticket"
7383
7484 let keyBuyToken = "_buy_token"
7585
7686 let keyClaimParams = "_claim_params"
7787
78-let keyHighCompetitionComission = "_high_competition_comission"
88+let keyUserBoughtTicketsAmount = "_bought_tickets"
7989
80-let keyHighCompetitionSale = "_high_competition_sale"
81-
82-let keyHCTicketLastNumber = "_high_competition_ticket_last_number"
83-
84-let keyHighCompetitionAmount = "_tickets_high_competition"
85-
86-let keyTotalAmountBuyAssetSoldHC = "_total_buy_asset_sold_high_competition"
87-
88-let keyUserBoughtTicketsAmount = "_bought_tickets"
90+let keyUserHCBoughtTicketsAmount = "_bought_tickets_high_competition"
8991
9092 let keyUserTickets = "_tickets_number"
9193
9294 let keyUserHCTickets = "_tickets_number_high_competition"
93-
94-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"
105105
106-let keyUserWinnedHighCompetitionTicketsAmount = "_tickets_result_high_competition"
107-
108106 let keyUserFreezeToken = "_freeze_token_amount"
109107
110108 let oracle = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
111109
112110 let governance = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
113111
114-let commissionWallet = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
112+let commissionWallet = Address(base58'3PGYafJ2GuqPckmZNywet8moiPnBHz51Xdg')
115113
116-let stakingUSDNAddress = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
114+let stakingUSDNAddress = Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ')
117115
118-let USDN = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
116+let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
119117
120-let adminPubKeyStaking = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
118+let adminPubKeyStaking = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
121119
122120 let maxAllocationsAmount = 2
123121
124122 let isActive = valueOrElse(getBoolean(this, keyActive), true)
125123
126124 let activeLaunchpadId = valueOrElse(getIntegerValue(this, keyLaunchpadActiveId), -1)
127125
128126 func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) {
129127 case string: String =>
130128 fromBase58String(string)
131129 case nothing =>
132130 throw("Admin public key is empty")
133131 }
134132
135133
136134 let adminPubKey1 = getAdminPub(keyAdminPubKey1)
137135
138136 let adminPubKey2 = getAdminPub(keyAdminPubKey2)
139137
140138 let adminPubKey3 = getAdminPub(keyAdminPubKey3)
141139
142140 func getAssetInfo (assetId) = match assetId {
143141 case id: ByteVector =>
144142 let stringId = toBase58String(id)
145143 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
146144 $Tuple3(stringId, info.name, info.decimals)
147145 case waves: Unit =>
148146 $Tuple3("WAVES", "WAVES", 8)
149147 case _ =>
150148 throw("Match error")
151149 }
152150
153151
154152 func getLaunchpadNextId () = valueOrElse(getInteger(this, keyLaunchpadNextId), 1)
155153
156154
157155 func stakedUsdnAmount () = valueOrElse(getInteger(stakingUSDNAddress, ((("rpd_balance_" + toBase58String(USDN)) + "_") + toString(this))), 0)
158156
159157
160158 func getAssetInfoFromString (assetStr) = if ((assetStr == "WAVES"))
161159 then $Tuple4(unit, "WAVES", "WAVES", 8)
162160 else {
163161 let stringId = assetStr
164162 let id = fromBase58String(assetStr)
165163 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
166164 $Tuple4(id, stringId, info.name, info.decimals)
167165 }
168166
169167
170168 @Callable(i)
171169 func hashingRandom (launchpadId,hash) = if (!(isActive))
172170 then throw("DApp is inactive at this moment")
173171 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
174172 then throw("Only admin can call this function")
175173 else [StringEntry((toString(launchpadId) + keyVerifyHash), hash)]
176174
177175
178176
179177 @Callable(i)
180178 func initCaller (address) = if (!(isActive))
181179 then throw("DApp is inactive at this moment")
182180 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
183181 then throw("Only admin can call this function")
184182 else [StringEntry(keyInitCaller, address)]
185183
186184
187185
188186 @Callable(i)
189187 func init (projectAddress,startHeight,duration,buyToken,commission,tokensPerTicket,pricePerToken,swopfiTicketsAmount,campaignTokensAmount,tokensPerAllocation,swopPerTicket,swopFreezeDuration,claimParams,HighCompetitionSale,highCompetitionComission,highCompetitionTicketsAmount,freezeAdditionalToken,freezeParams) = if (!(isActive))
190188 then throw("DApp is inactive at this moment")
191189 else if ((toString(i.caller) != valueOrElse(getString(this, keyInitCaller), "")))
192190 then throw("Only project admin can call init function")
193191 else if ((size(i.payments) != 1))
194192 then throw("One attached payment expected")
195193 else if ((height > startHeight))
196194 then throw("Start height must be greater than blockchain height")
197195 else if (if (freezeAdditionalToken)
198196 then (size(freezeParams) != 3)
199197 else false)
200198 then throw("Freeze params list must have 3 items")
201199 else {
202200 let launchpadId = getLaunchpadNextId()
203201 let launchpadIdStr = toString(launchpadId)
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
202+ let $t063366411 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
203+ let pmtAmount = $t063366411._1
204+ let pmtAssetId = $t063366411._2
205+ let $t064206493 = getAssetInfo(pmtAssetId)
206+ let pmtStrAssetId = $t064206493._1
207+ let pmtAssetName = $t064206493._2
208+ let pmtDecimals = $t064206493._3
211209 let freezeAdditionalEntry = if (freezeAdditionalToken)
212210 then [BooleanEntry((launchpadIdStr + keyFreezeAdditionalToken), true), StringEntry((launchpadIdStr + keyFreezeTokenId), freezeParams[0]), IntegerEntry((launchpadIdStr + keyFreezeTokenDuration), parseIntValue(freezeParams[1])), IntegerEntry((launchpadIdStr + keyFreezeTokenPerTicket), parseIntValue(freezeParams[2]))]
213211 else nil
214- ([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)
212+ ([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 + keyHighCompetitionComission), highCompetitionComission), 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 + keyHCAmount), highCompetitionTicketsAmount), IntegerEntry((launchpadIdStr + keyTokensPerAllocation), tokensPerAllocation), StringEntry((launchpadIdStr + keyClaimParams), makeString(claimParams, ",")), BooleanEntry((launchpadIdStr + keyHighCompetitionSale), HighCompetitionSale), IntegerEntry(keyLaunchpadActiveId, launchpadId), StringEntry(keyInitCaller, "")] ++ freezeAdditionalEntry)
215213 }
216214
217215
218216
219217 @Callable(i)
220218 func commitSwopfiSale (launchpadId,refId) = {
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
219+ let $t089939068 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
220+ let pmtAmount = $t089939068._1
221+ let pmtAssetId = $t089939068._2
222+ let $t090739223 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
223+ let buyAssetId = $t090739223._1
224+ let buyAssetStrId = $t090739223._2
225+ let buyAssetName = $t090739223._3
226+ let buyAssetDecimals = $t090739223._4
229227 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
230228 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
231229 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
232230 let allowedTicketsAmount = (allowedTicketsAmountAll - boughtTicketsAmount)
233231 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
234232 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
235233 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
236234 if (!(isActive))
237235 then throw("DApp is inactive at this moment")
238236 else if ((activeLaunchpadId != launchpadId))
239237 then throw("There is no active launchpad or this launchpad is ended")
240238 else if ((startHeight > height))
241239 then throw("Launchpad sale not started yet")
242240 else if ((height > (startHeight + duration)))
243241 then throw("Launchpad sale ended")
244242 else if (if (!(freezeAdditionalToken))
245243 then if ((size(i.payments) != 1))
246244 then true
247245 else (pmtAssetId != buyAssetId)
248246 else false)
249247 then throw((("One attached payment in " + buyAssetName) + " expected"))
250248 else if (if (freezeAdditionalToken)
251249 then if ((size(i.payments) != 2))
252250 then true
253251 else (pmtAssetId != buyAssetId)
254252 else false)
255253 then {
256254 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
257255 throw(((("Two attached payments expected: First in " + buyAssetName) + ", second in ") + freezeTokenId))
258256 }
259257 else if (if ((0 >= allowedTicketsAmountAll))
260258 then true
261259 else (0 >= allowedTicketsAmount))
262260 then throw("Not enought SWOP in staking to buy tickets")
263261 else {
264262 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
265263 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
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
264+ let $t01111111255 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
265+ let tokenId = $t01111111255._1
266+ let tokenStrAssetId = $t01111111255._2
267+ let tokenAssetName = $t01111111255._3
268+ let tokenDecimals = $t01111111255._4
271269 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
272270 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
273271 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
274272 let allowedBuyTicketAmount = min([buyTicketAmount, allowedTicketsAmount])
275273 let allowedBuyPriceWithComission = (allowedBuyTicketAmount * (ticketPrice + commissionPerTicket))
276274 let change = (pmtAmount - allowedBuyPriceWithComission)
277275 if ((buyTicketAmount == 0))
278276 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
279277 else if ((change != 0))
280278 then throw((((("Wrong payment. To buy " + toString(allowedBuyTicketAmount)) + "tickets you need to pay ") + toString(allowedBuyPriceWithComission)) + buyAssetName))
281279 else {
282280 let freezeAdditionalEntry = if (freezeAdditionalToken)
283281 then {
284282 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
285283 let freezeTokenPerTicket = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenPerTicket))
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
284+ let $t01241912506 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
285+ let pmtAmountFreeze = $t01241912506._1
286+ let pmtAssetIdFreeze = $t01241912506._2
287+ let $t01252312614 = getAssetInfo(pmtAssetId)
288+ let pmtFreezeStrAssetId = $t01252312614._1
289+ let pmtFreezeAssetName = $t01252312614._2
290+ let pmtFreezeDecimals = $t01252312614._3
293291 let needFreezeTokens = (freezeTokenPerTicket * buyTicketAmount)
294292 if (if ((pmtFreezeStrAssetId != freezeTokenId))
295293 then true
296294 else (needFreezeTokens != pmtAmountFreeze))
297295 then throw((((("You need to add " + toString(needFreezeTokens)) + " ") + pmtFreezeAssetName) + " as a second payment"))
298296 else [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), pmtAmountFreeze)]
299297 }
300298 else nil
301299 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets)), "")
302300 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyTicketLastNumber))
303301 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + allowedBuyTicketAmount)))
304302 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
305303 then ("," + boughtRange)
306304 else ("" + boughtRange)))
307305 let inv = if ((buyAssetId == USDN))
308306 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
309307 else 0
310308 if ((inv == inv))
311309 then {
312310 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)
313311 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
314312 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
315313 else baseEntry
316314 }
317315 else throw("Strict value is not equal to itself.")
318316 }
319317 }
320318 }
321319
322320
323321
324322 @Callable(i)
325323 func commitAccessListSale (launchpadId,refId) = {
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
324+ let $t01466114736 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
325+ let pmtAmount = $t01466114736._1
326+ let pmtAssetId = $t01466114736._2
327+ let $t01474114891 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
328+ let buyAssetId = $t01474114891._1
329+ let buyAssetStrId = $t01474114891._2
330+ let buyAssetName = $t01474114891._3
331+ let buyAssetDecimals = $t01474114891._4
334332 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing)), 0)
335333 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountBuyAssetInMarketing)), 0)
336334 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
337335 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
338336 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
339337 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
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
338+ let $t01556015704 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
339+ let tokenId = $t01556015704._1
340+ let tokenStrAssetId = $t01556015704._2
341+ let tokenAssetName = $t01556015704._3
342+ let tokenDecimals = $t01556015704._4
345343 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
346344 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
347345 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
348346 if (!(isActive))
349347 then throw("DApp is inactive at this moment")
350348 else if ((activeLaunchpadId != launchpadId))
351349 then throw("There is no active launchpad or this launchpad is ended")
352350 else if ((startHeight > height))
353351 then throw("Launchpad sale not started yet")
354352 else if ((height > (startHeight + duration)))
355353 then throw("Launchpad sale ended")
356354 else if (if ((size(i.payments) != 1))
357355 then true
358356 else (pmtAssetId != buyAssetId))
359357 then throw((("One attached payment in " + buyAssetName) + " expected"))
360358 else if ((boughtAllocations >= maxAllocationsAmount))
361359 then throw((("You can buy only " + toString(maxAllocationsAmount)) + "allocations"))
362360 else if (if ((allocationPriceWithComission != pmtAmount))
363361 then ((allocationPriceWithComission * 2) != pmtAmount)
364362 else false)
365363 then throw(((("Wrong payment. You can buy 1 or 2 allocations for " + toString(allocationPriceWithComission)) + buyAssetName) + " per allocation"))
366364 else {
367365 let buyAllocationsAmount = (pmtAmount / allocationPriceWithComission)
368366 let inv = if ((buyAssetId == USDN))
369367 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
370368 else 0
371369 if ((inv == inv))
372370 then {
373371 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))]
374372 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
375373 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
376374 else baseEntry
377375 }
378376 else throw("Strict value is not equal to itself.")
379377 }
380378 }
381379
382380
383381
384382 @Callable(i)
385383 func commitHighCompetitionSale (launchpadId,refId) = {
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
384+ let $t01801318088 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
385+ let pmtAmount = $t01801318088._1
386+ let pmtAssetId = $t01801318088._2
387+ let $t01809318243 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
388+ let buyAssetId = $t01809318243._1
389+ let buyAssetStrId = $t01809318243._2
390+ let buyAssetName = $t01809318243._3
391+ let buyAssetDecimals = $t01809318243._4
394392 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
395393 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
396394 let boughtHCTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
397395 let highCompetitionSale = valueOrElse(getBoolean(this, (toString(launchpadId) + keyHighCompetitionSale)), false)
398396 if (!(isActive))
399397 then throw("DApp is inactive at this moment")
400398 else if ((activeLaunchpadId != launchpadId))
401399 then throw("There is no active launchpad or this launchpad is ended")
402400 else if (!(highCompetitionSale))
403401 then throw("There is no high competition sale for this launchpad")
404402 else if ((startHeight > height))
405403 then throw("Launchpad sale not started yet")
406404 else if ((height > (startHeight + duration)))
407405 then throw("Launchpad sale ended")
408406 else if (if ((size(i.payments) != 1))
409407 then true
410408 else (pmtAssetId != buyAssetId))
411409 then throw((("One attached payment in " + buyAssetName) + " expected"))
412410 else {
413411 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
414412 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
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
413+ let $t01949219636 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
414+ let tokenId = $t01949219636._1
415+ let tokenStrAssetId = $t01949219636._2
416+ let tokenAssetName = $t01949219636._3
417+ let tokenDecimals = $t01949219636._4
420418 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
421419 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission)), 100)
422420 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
423421 let buyPriceWithComission = (buyTicketAmount * (ticketPrice + commissionPerTicket))
424422 let change = (pmtAmount - buyPriceWithComission)
425423 if ((buyTicketAmount == 0))
426424 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
427425 else if ((change != 0))
428426 then throw((((("Wrong payment. To buy " + toString(buyTicketAmount)) + "tickets you need to pay ") + toString(buyPriceWithComission)) + buyAssetName))
429427 else {
430428 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCTickets)), "")
431429 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyHCTicketLastNumber))
432430 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + buyTicketAmount)))
433431 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
434432 then ("," + boughtRange)
435433 else ("" + boughtRange)))
436434 let inv = if ((buyAssetId == USDN))
437435 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
438436 else 0
439437 if ((inv == inv))
440438 then {
441439 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)]
442440 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
443441 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
444442 else baseEntry
445443 }
446444 else throw("Strict value is not equal to itself.")
447445 }
448446 }
449447 }
450448
451449
452450
453451 @Callable(i)
454452 func finalise (launchpadId,vrfHeight,secretWord) = {
455453 let savedHash = getStringValue(this, (toString(launchpadId) + keyVerifyHash))
456454 let calcHash = toBase58String(sha256((toBytes(vrfHeight) + toBytes(secretWord))))
457455 if (!(isActive))
458456 then throw("DApp is inactive at this moment")
459457 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
460458 then throw("Only admin can call this function")
461459 else if ((calcHash != savedHash))
462460 then throw("vrf Height hash not matching")
463461 else {
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
462+ let $t02242122571 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
463+ let buyAssetId = $t02242122571._1
464+ let buyAssetStrId = $t02242122571._2
465+ let buyAssetName = $t02242122571._3
466+ let buyAssetDecimals = $t02242122571._4
469467 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
470468 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
471469 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
472470 let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
473471 let swopfiMembersBuyAssetAmount = getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSold))
474472 let swopfiHCBuyAssetAmount = valueOrElse(getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSoldHC)), 0)
475473 let swopfiMembersComission = fraction(swopfiMembersBuyAssetAmount, commission, 100)
476474 let swopfiHCComission = fraction(swopfiHCBuyAssetAmount, commissionHC, 100)
477475 let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
478476 let marketingComission = fraction(totalAmountBuyAssetInMarketing, commission, 100)
479477 let unstakeAmount = (((((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiMembersComission) + marketingComission) + swopfiHCBuyAssetAmount) + swopfiHCComission)
480478 if ((transferedBuyAsset > (swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing)))
481479 then throw("Can't transfer negative value to project")
482480 else {
483481 let inv = if ((buyAssetId == USDN))
484482 then invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toBase58String(USDN)], nil)
485483 else 0
486484 if ((inv == inv))
487485 then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, ((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) - transferedBuyAsset), buyAssetId), ScriptTransfer(commissionWallet, ((swopfiMembersComission + marketingComission) + swopfiHCComission), buyAssetId)]
488486 else throw("Strict value is not equal to itself.")
489487 }
490488 }
491489 }
492490
493491
494492
495493 @Callable(i)
496494 func claim (launchpadId) = {
497495 let userClaimStatus = valueOrElse(getBoolean(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus)), false)
498496 let boughtTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
499497 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
500498 if (!(isActive))
501499 then throw("DApp is inactive at this moment")
502500 else if (!(isDefined(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)))))
503501 then throw("You can't claim because results are not finalized")
504502 else if (userClaimStatus)
505503 then throw("You are already claimed")
506504 else if (if ((boughtTickets == 0))
507505 then (boughtAllocations == 0)
508506 else false)
509507 then throw("You can't claim because you don't buy anything")
510508 else {
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
509+ let $t02543025580 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
510+ let buyAssetId = $t02543025580._1
511+ let buyAssetStrId = $t02543025580._2
512+ let buyAssetName = $t02543025580._3
513+ let buyAssetDecimals = $t02543025580._4
516514 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
517515 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
518516 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
519517 let allowedAllocations = min([boughtAllocations, awailableAllocations])
520518 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
521519 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
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
520+ let $t02622726371 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
521+ let tokenId = $t02622726371._1
522+ let tokenStrAssetId = $t02622726371._2
523+ let tokenAssetName = $t02622726371._3
524+ let tokenDecimals = $t02622726371._4
527525 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
528526 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
529527 let transferTokensAmount = ((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation))
530528 let notAllowedAllocationsTokens = ((boughtAllocations - allowedAllocations) * tokensPerAllocation)
531529 let buyAssetForAllocations = fraction(fraction(notAllowedAllocationsTokens, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
532530 let buyAssetForUnwonnedTickets = fraction(((boughtTickets - wonnedTickets) * ticketPrice), (100 + commission), 100)
533531 if (if ((0 > buyAssetForAllocations))
534532 then true
535533 else (0 > buyAssetForUnwonnedTickets))
536534 then throw("Error with allowed allocation param or wonned tickets param please contact support")
537535 else {
538536 let returnedBuyAssetAmount = (buyAssetForUnwonnedTickets + buyAssetForUnwonnedTickets)
539537 let transferUsdn = if ((returnedBuyAssetAmount > 0))
540538 then [ScriptTransfer(i.caller, returnedBuyAssetAmount, buyAssetId)]
541539 else nil
542540 let transferTokens = if ((transferTokensAmount > 0))
543541 then [ScriptTransfer(i.caller, transferTokensAmount, tokenId)]
544542 else nil
545543 let inv = if (if ((returnedBuyAssetAmount > 0))
546544 then (buyAssetId == USDN)
547545 else false)
548546 then invoke(stakingUSDNAddress, "unlockNeutrino", [returnedBuyAssetAmount, toBase58String(USDN)], nil)
549547 else 0
550548 if ((inv == inv))
551549 then (([BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true)] ++ transferTokens) ++ transferUsdn)
552550 else throw("Strict value is not equal to itself.")
553551 }
554552 }
555553 }
556554
557555
558556
559557 @Callable(i)
560558 func claimFreezeToken (launchpadId) = {
561559 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
562560 if (!(isActive))
563561 then throw("DApp is inactive at this moment")
564562 else if (!(isDefined(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)))))
565563 then throw("You can't claim because results are not finalized")
566564 else if (!(freezeAdditionalToken))
567565 then throw("There are no additional token freezing for this launchpad")
568566 else {
569567 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyFreezeTokenId)))
570568 let userTokensFreezed = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken)), 0)
571569 let startHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyStartHeight)), 0)
572570 let duration = valueOrElse(getInteger(this, (toString(launchpadId) + keyDuration)), 0)
573571 let freezeTokenDuration = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenDuration))
574572 let blockEndHeight = ((startHeight + duration) + freezeTokenDuration)
575573 if ((userTokensFreezed == 0))
576574 then throw("You are already claimed your tokens or not paid anything")
577575 else if ((blockEndHeight > height))
578576 then throw(("Your tokens freezed teel " + toString(blockEndHeight)))
579577 else [ScriptTransfer(i.caller, userTokensFreezed, tokenId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), 0)]
580578 }
581579 }
582580
583581
584582
585583 @Callable(i)
586584 func transferBuyAsset (launchpadId,amount) = if (!(isActive))
587585 then throw("DApp is inactive")
588586 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
589587 then throw("Only admin can call this function")
590588 else {
591589 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
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
590+ let $t03004330193 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
591+ let buyAssetId = $t03004330193._1
592+ let buyAssetStrId = $t03004330193._2
593+ let buyAssetName = $t03004330193._3
594+ let buyAssetDecimals = $t03004330193._4
597595 [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), amount), ScriptTransfer(projectAddress, amount, buyAssetId)]
598596 }
599597
600598
601599
602600 @Callable(i)
603601 func shutdown () = if (!(isActive))
604602 then throw("DApp already inactive")
605603 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
606604 then throw("Only admin can call this function")
607605 else [BooleanEntry(keyActive, false)]
608606
609607
610608
611609 @Callable(i)
612610 func activate () = if (isActive)
613611 then throw("DApp already active")
614612 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
615613 then throw("Only admin can call this function")
616614 else [BooleanEntry(keyActive, true)]
617615
618616
619617 @Verifier(tx)
620618 func verify () = {
621619 let multiSignedByAdmins = {
622620 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
623621 then 1
624622 else 0
625623 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
626624 then 1
627625 else 0
628626 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
629627 then 1
630628 else 0
631629 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
632630 }
633631 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
634632 then true
635633 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
636634 then true
637635 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
638636 then true
639637 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKeyStaking)
640638 match tx {
641639 case dtx: DataTransaction =>
642640 if (valueOrElse(getBoolean(oracle, keyLaunchpadDataTransactionStatus), false))
643641 then signedByAdmin
644642 else false
645643 case _ =>
646644 multiSignedByAdmins
647645 }
648646 }
649647

github/deemru/w8io/169f3d6 
151.93 ms