Contract con_launchpad_7


Contract Code


  
1 # Launchpad v1
2 # Token Creator creates a token and puts amount of token up for sale.
3 # He will need to set a token contract, start, end time, hardcap, tokens for sale and maximum buy.
4 # People can invest TAU
5 # If end time reached and softcap reached - Make tokens available to claim
6 # If hardcap reached - Make tokens available to claim
7 # If endtime reached and softcap not reached - Refund TAU, Refund Tokens to Creator
8 #
9 #
10
11 I = importlib
12 random.seed() # To generate somewhat unique token sale id
13
14 token_sales = Hash(default_value=0)
15 investments = Hash(default_value=0)
16
17 sales = Variable() # IDs of all sales for listing on website
18
19 start_fee = Variable() # For MOB Holders Airdrop Token Fee
20 end_fee = Variable() # Only if sale is successful then tau fee of raised money
21 operator = Variable() # I can help when the sale is over but is not getting finalized
22 dev_fees = Variable()
23 mobgov_contract = Variable()
24
25 @construct
26 def seed():
27 end_fee.set(5)
28 operator.set(
29 "ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89")
30 sales.set("None")
31 mobgov_contract.set("con_mintorburn_gov")
32 start_fee.set(2)
33
34 @export
35 def create_sale(start_date_day: int, start_date_month: int, start_date_year: int, start_date_hour: int, start_date_minute: int, softcap: float, hardcap: float, max_buy: float, tokens_for_sale: float, token_contract: str, end_date_day: int, end_date_month: int, end_date_year: int, end_date_hour: int, end_date_minute: int):
36 token_sale_id = str(random.randint(0, 100000000))
37 assert token_sale_id not in sales.get().split(','), "Try again"
38 assert tokens_for_sale > 0, "The token amount needs to be over 0"
39 assert datetime.datetime(start_date_year, start_date_month, start_date_day, start_date_hour, start_date_minute) > now, "The start needs to be in the future"
40 assert datetime.datetime(end_date_year, end_date_month, end_date_day, end_date_hour, end_date_minute) > now, "The end needs to be in the future"
41 assert datetime.datetime(end_date_year, end_date_month, end_date_day, end_date_hour, end_date_minute) > datetime.datetime(start_date_year, start_date_month, start_date_day, start_date_hour, start_date_minute), "The end cannot be before the start"
42 I.import_module(token_contract).transfer_from(
43 main_account=ctx.caller,
44 amount=tokens_for_sale,
45 to=ctx.this)
46 token_sales[token_sale_id] = {"start_date": datetime.datetime(start_date_year, start_date_month, start_date_day, start_date_hour, start_date_minute), "end_date": datetime.datetime(
47 end_date_year, end_date_month, end_date_day, end_date_hour, end_date_minute), "softcap": softcap, "hardcap": hardcap, "max_buy": max_buy, "raised": decimal('0'), "tokens_for_sale": tokens_for_sale - (tokens_for_sale / 100 * start_fee.get()), "token_contract": token_contract, "seller": ctx.caller, "finalized": False, "success": False}
48 sales.set(sales.get() + "," + token_sale_id)
49
50 @export
51 def finalize(token_sale_id: str):
52 token_sale = token_sales[token_sale_id]
53 assert token_sale["finalized"] == False, "This sale is already finalized"
54 assert token_sale["end_date"] <= now, "The sale can only be finalized when the end date is reached"
55 assert token_sale["seller"] == ctx.caller or ctx.caller == operator.get(), "The sale can only be finalized by the seller"
56 if(token_sale["raised"] >= token_sale["softcap"]):
57 token_sale["success"] = True
58 I.import_module("currency").transfer(
59 amount=token_sale["raised"] - (token_sale["raised"] / 100 * end_fee.get()),
60 to=ctx.caller)
61 dev_fees.set(dev_fees.get() + (token_sale["raised"] / 100 * end_fee.get()))
62 if(token_sale["raised"] < token_sale["hardcap"]): # Refund the leftover tokens
63 I.import_module(token_sale["token_contract"]).transfer(
64 amount= (token_sale["hardcap"] / token_sale["tokens_for_sale"]) * (token_sale["hardcap"] - token_sale["raised"]),
65 to=ctx.caller)
66 else:
67 token_sale["success"] = False
68 I.import_module(token_sale["token_contract"]).transfer(
69 amount=token_sale["tokens_for_sale"],
70 to=ctx.caller)
71 token_sale["finalized"] = True
72 token_sales[token_sale_id] = token_sale
73
74 @export
75 def buy(token_sale_id: str, amount_to_invest: float):
76 mobgov_holders = ForeignHash(foreign_contract=mobgov_contract.get(), foreign_name='balances')
77 if(mobgov_holders[ctx.caller] != None):
78 mobgov_holdings = mobgov_holders[ctx.caller]
79 else:
80 mobgov_holdings = 0
81 mobgov_advantage = 1
82 mobgov_early = False
83 if(mobgov_holdings >= 100):
84 mobgov_advantage = 1.2
85 elif(mobgov_holdings >= 1000):
86 mobgov_advantage = 1.5
87 mobgov_early = True
88 elif(mobgov_holdings >= 5000):
89 mobgov_advantage = 2
90 mobgov_early = True
91 token_sale = token_sales[token_sale_id]
92 assert token_sale["finalized"] == False, "This sale is already finalized"
93 assert token_sale["end_date"] > now, "The end date is already reached"
94 assert token_sale["raised"] + amount_to_invest <= token_sale["hardcap"], "This buy would exceed the sale hardcap"
95 assert investments[token_sale_id, ctx.caller] + amount_to_invest <= token_sale["max_buy"] * mobgov_advantage, "You are not allowed to buy that much"
96 assert amount_to_invest > 0, "The buy amount needs to be over 0"
97 assert token_sale["start_date"] < now or (mobgov_early == True and token_sale["start_date"] < (now + datetime.datetime(hour=1))), "The sale didnt start yet"
98
99 I.import_module("currency").transfer_from(
100 main_account=ctx.caller,
101 amount=amount_to_invest,
102 to=ctx.this)
103 token_sale["raised"] += amount_to_invest
104 investments[token_sale_id, ctx.caller] += amount_to_invest
105 token_sales[token_sale_id] = token_sale
106
107 @export
108 def claim(token_sale_id: str):
109 token_sale = token_sales[token_sale_id]
110 assert token_sale["finalized"] == True, "This sale needs to be finalized first"
111 if(token_sale["success"] == True):
112 I.import_module(token_sale["token_contract"]).transfer(
113 amount=token_sale["hardcap"] / token_sale["tokens_for_sale"] * investments[token_sale_id, ctx.caller],
114 to=ctx.caller)
115 investments[token_sale_id, ctx.caller] = 0
116 elif(token_sale["success"] == False):
117 I.import_module("currency").transfer(
118 amount=investments[token_sale_id, ctx.caller],
119 to=ctx.caller)
120 investments[token_sale_id, ctx.caller] = 0
121
122
123 @export
124 def admin_fee_claim_tau(amount: float):
125 assert ctx.caller == operator.get(), "You are not the operator"
126 I.import_module("currency").transfer(
127 amount=amount,
128 to=ctx.caller)
129 dev_fees.set(dev_fees.get() - amount)
130
131 @export
132 def admin_fee_claim_tokens(amount: float, token_contract: str):
133 assert ctx.caller == operator.get(), "You are not the operator"
134 I.import_module(token_contract).transfer(
135 amount=amount,
136 to=ctx.caller)
137
138 @export
139 def admin_set_mobgov_contract(contract: str):
140 assert ctx.caller == operator.get(), "You are not the operator"
141 mobgov_contract.set(contract)
142
143 @export
144 def admin_set_end_fee(fee: float):
145 assert ctx.caller == operator.get(), "You are not the operator"
146 end_fee.set(fee)
147

Byte Code

e30000000000000000000000001100000040000000734c01000065005a0165026a0383000100650464006401640264038d035a05650464006401640464038d035a0665076401640564068d025a0865076401640764068d025a0965076401640864068d025a0a65076401640964068d025a0b65076401640a64068d025a0c65076401640b64068d025a0d640c640d84005a0e650f64018301651065106510651065106511651165116511651265106510651065106510640e9c0f640f6410840483015a13650f64018301651264119c0164126413840483015a14650f640183016512651164149c0264156416840483015a15650f64018301651264119c0164176418840483015a16650f64018301651164199c01641a641b840483015a17650f6401830165116512641c9c02641d641e840483015a18650f640183016512641f9c0164206421840483015a19650f64018301651164229c0164236424840483015a1a642553002926e900000000da0f636f6e5f6c61756e63687061645f37da0b746f6b656e5f73616c65732903da0d64656661756c745f76616c7565da08636f6e7472616374da046e616d65da0b696e766573746d656e7473da0573616c6573290272050000007206000000da0973746172745f666565da07656e645f666565da086f70657261746f72da086465765f66656573da0f6d6f62676f765f636f6e7472616374630000000000000000000000000200000043000000733600000074006a0164018301010074026a0164028301010074036a0164038301010074046a0164048301010074056a016405830101006400530029064ee905000000da4066663631353434656139346561616562356466303865643836336334613933386539313239616261366365656535663331623636383162646564653131623839da044e6f6e65da12636f6e5f6d696e746f726275726e5f676f76e9020000002906da095f5f656e645f666565da03736574da0a5f5f6f70657261746f72da075f5f73616c6573da115f5f6d6f62676f765f636f6e7472616374da0b5f5f73746172745f666565a90072190000007219000000da00da045f5f5f5f10000000730c00000000010a01040106010a010a01721b000000290fda0e73746172745f646174655f646179da1073746172745f646174655f6d6f6e7468da0f73746172745f646174655f79656172da0f73746172745f646174655f686f7572da1173746172745f646174655f6d696e757465da07736f6674636170da0768617264636170da076d61785f627579da0f746f6b656e735f666f725f73616c65da0e746f6b656e5f636f6e7472616374da0c656e645f646174655f646179da0e656e645f646174655f6d6f6e7468da0d656e645f646174655f79656172da0d656e645f646174655f686f7572da0f656e645f646174655f6d696e757465630f00000000000000100000000c000000430000007328010000740074016a0264016402830283017d0f7c0f74036a0483006a05640383016b07732a74066404830182017c0864016b04733a740664058301820174076a077c027c017c007c037c04830574086b047358740664068301820174076a077c0c7c0b7c0a7c0d7c0e830574086b047376740664078301820174076a077c0c7c0b7c0a7c0d7c0e830574076a077c027c017c007c037c0483056b0473a2740664088301820174096a0a7c0983016a0b740c6a0d7c08740c6a0e64098d03010074076a077c027c017c007c037c04830574076a077c0c7c0b7c0a7c0d7c0e83057c057c067c07740f640a83017c087c08640b1b0074106a048300140018007c09740c6a0d640c640c640d9c0b74117c0f3c0074036a1274036a048300640317007c0f17008301010064005300290e4e72010000006900e1f505fa012c7a0954727920616761696e7a2354686520746f6b656e20616d6f756e74206e6565647320746f206265206f76657220307a23546865207374617274206e6565647320746f20626520696e20746865206675747572657a2154686520656e64206e6565647320746f20626520696e20746865206675747572657a2254686520656e642063616e6e6f74206265206265666f7265207468652073746172742903da0c6d61696e5f6163636f756e74da06616d6f756e74da02746fda0130e96400000046290bda0a73746172745f64617465da08656e645f64617465722100000072220000007223000000da0672616973656472240000007225000000da0673656c6c6572da0966696e616c697a6564da07737563636573732913da03737472da0672616e646f6dda0772616e64696e747216000000da03676574da0573706c6974da0e417373657274696f6e4572726f72da086461746574696d65da036e6f77da0149da0d696d706f72745f6d6f64756c65da0d7472616e736665725f66726f6dda03637478da0663616c6c6572da0474686973da07646563696d616c7218000000da0d5f5f746f6b656e5f73616c657372140000002910721c000000721d000000721e000000721f0000007220000000722100000072220000007223000000722400000072250000007226000000722700000072280000007229000000722a000000da0d746f6b656e5f73616c655f696472190000007219000000721a000000da0b6372656174655f73616c65190000007332000000000610011a011001080108010e010a0106010e010a010c01100106010e010c01040108010a010a0106010801100108010c01724800000029017247000000630100000000000000020000000500000043000000734201000074007c0019007d017c016401190064026b02731c74016403830182017c016404190074026b01733074016405830182017c016406190074036a046b02735474036a0474056a0683006b02735474016407830182017c01640819007c01640919006b0590017208640a7c01640b3c0074076a08640c83016a097c01640819007c0164081900640d1b00740a6a0683001400180074036a04640e8d020100740b6a0c740b6a0683007c0164081900640d1b00740a6a06830014001700830101007c01640819007c01640f19006b009001722e74076a087c016410190083016a097c01640f19007c01641119001b007c01640f19007c01640819001800140074036a04640e8d0201006e2664027c01640b3c0074076a087c016410190083016a097c016411190074036a04640e8d020100640a7c0164013c007c0174007c003c006400530029124e7235000000467a1e546869732073616c6520697320616c72656164792066696e616c697a656472320000007a3b5468652073616c652063616e206f6e6c792062652066696e616c697a6564207768656e2074686520656e642064617465206973207265616368656472340000007a2c5468652073616c652063616e206f6e6c792062652066696e616c697a6564206279207468652073656c6c657272330000007221000000547236000000da0863757272656e637972300000002902722d000000722e000000722200000072250000007224000000290d7246000000723c000000723e000000724200000072430000007215000000723a000000723f0000007240000000da087472616e736665727213000000da0a5f5f6465765f66656573721400000029027247000000da0a746f6b656e5f73616c6572190000007219000000721a000000da0866696e616c697a653a000000732a00000000020801140106010e011e0106011201080110011e0114010e0112010e010e011c0208010e0110010801724d00000029027247000000da10616d6f756e745f746f5f696e76657374630200000000000000070000000600000043000000737a010000740074016a02830064016402640364048d047d027c0274036a04190064006b03722e7c0274036a0419007d036e0464057d0364067d0464077d057c0364086b05724c7405640983017d046e267c03640a6b0572627405640b83017d04640c7d056e107c03640d6b057272640e7d04640c7d0574067c0019007d067c06640f190064076b02738e74076410830182017c066411190074086b0473a274076412830182017c06641319007c0117007c06641419006b0173be740764158301820174097c0074036a04660219007c0117007c06641619007c0414006b0173e474076417830182017c0164056b0473f474076418830182017c066419190074086b009001732e7c05640c6b02900172267c06641919007408740a6a0a6406641a8d0117006b009001732e7407641b83018201740b6a0c641c83016a0d74036a047c0174036a0e641d8d0301007c066413050019007c01370003003c0074097c0074036a046602050019007c01370003003c007c0674067c003c0064005300291e4eda0862616c616e6365737202000000da0e6d6f62676f765f686f6c646572732904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d65720500000072060000007201000000e9010000004672300000007a03312e3269e80300007a03312e35546988130000721200000072350000007a1e546869732073616c6520697320616c72656164792066696e616c697a656472320000007a1f54686520656e64206461746520697320616c72656164792072656163686564723300000072220000007a26546869732062757920776f756c6420657863656564207468652073616c65206861726463617072230000007a24596f7520617265206e6f7420616c6c6f77656420746f206275792074686174206d7563687a215468652062757920616d6f756e74206e6565647320746f206265206f766572203072310000002901da04686f75727a185468652073616c65206469646e742073746172742079657472490000002903722c000000722d000000722e000000290fda0b466f726569676e486173687217000000723a0000007242000000724300000072450000007246000000723c000000723e000000da0d5f5f696e766573746d656e7473723d000000723f00000072400000007241000000724400000029077247000000724e000000da105f5f6d6f62676f765f686f6c64657273da0f6d6f62676f765f686f6c64696e6773da106d6f62676f765f616476616e74616765da0c6d6f62676f765f6561726c79724c00000072190000007219000000721a000000da0362757954000000734200000000020801040108010e010c0204010401040108010a01080108010601080104010401080114011401160106010c010a0110011001060118011c010e010c0110011601725b00000063010000000000000002000000050000004300000073aa00000074007c0019007d017c016401190064026b02731c74016403830182017c016404190064026b02726c74026a037c016405190083016a047c01640619007c01640719001b0074057c0074066a0766021900140074066a0764088d020100640974057c0074066a0766023c006e3a7c0164041900640a6b0272a674026a03640b83016a0474057c0074066a076602190074066a0764088d020100640974057c0074066a0766023c0064005300290c4e7235000000547a25546869732073616c65206e6565647320746f2062652066696e616c697a656420666972737472360000007225000000722200000072240000002902722d000000722e000000720100000046724900000029087246000000723c000000723f0000007240000000724a00000072560000007242000000724300000029027247000000724c00000072190000007219000000721a000000da05636c61696d7a00000073180000000002080106010e010c010e010e01180110010c010c011401725c0000002901722d000000630100000000000000010000000400000043000000734200000074006a0174026a0383006b027316740464018301820174056a06640283016a077c0074006a0164038d02010074086a0974086a0383007c001800830101006400530029044e7a18596f7520617265206e6f7420746865206f70657261746f7272490000002902722d000000722e000000290a724200000072430000007215000000723a000000723c000000723f0000007240000000724a000000724b00000072140000002901722d00000072190000007219000000721a000000da1361646d696e5f6665655f636c61696d5f7461758a0000007306000000000216011601725d0000002902722d0000007225000000630200000000000000020000000400000043000000733000000074006a0174026a0383006b027316740464018301820174056a067c0183016a077c0074006a0164028d0201006400530029034e7a18596f7520617265206e6f7420746865206f70657261746f722902722d000000722e0000002908724200000072430000007215000000723a000000723c000000723f0000007240000000724a0000002902722d000000722500000072190000007219000000721a000000da1661646d696e5f6665655f636c61696d5f746f6b656e7391000000730400000000021601725e00000029017205000000630100000000000000010000000200000043000000732400000074006a0174026a0383006b027316740464018301820174056a067c00830101006400530029024e7a18596f7520617265206e6f7420746865206f70657261746f722907724200000072430000007215000000723a000000723c000000721700000072140000002901720500000072190000007219000000721a000000da1961646d696e5f7365745f6d6f62676f765f636f6e747261637497000000730400000000021601725f0000002901da03666565630100000000000000010000000200000043000000732400000074006a0174026a0383006b027316740464018301820174056a067c00830101006400530029024e7a18596f7520617265206e6f7420746865206f70657261746f722907724200000072430000007215000000723a000000723c000000721300000072140000002901726000000072190000007219000000721a000000da1161646d696e5f7365745f656e645f6665659d00000073040000000002160172610000004e291bda09696d706f72746c6962723f0000007238000000da0473656564da044861736872460000007256000000da085661726961626c657216000000721800000072130000007215000000724b0000007217000000721b000000da085f5f6578706f7274da03696e74da05666c6f617472370000007248000000724d000000725b000000725c000000725d000000725e000000725f0000007261000000721900000072190000007219000000721a000000da083c6d6f64756c653e0100000073400000000401080106010801060108010c010c010c010c010c010c04080906010401080106010801121c06011019060112250601100f0601100606011205060110050601