Contract con_launchpad_4


Contract Code


  
1 # Launchpad v1.0 without MOBGOV features
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 end_fee = Variable() # Only if sale is successful then fee of raised money
20 operator = Variable() # DEV can help while the sale is running if its a scam or something
21 dev_fees = Variable()
22
23
24 @construct
25 def seed():
26 end_fee.set(5)
27 operator.set(
28 "ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89")
29 sales.set("None")
30
31 @export
32 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):
33 token_sale_id = str(random.randint(0, 100000000))
34 assert token_sale_id not in sales.get().split(','), "Try again"
35 assert tokens_for_sale > 0, "The token amount needs to be over 0"
36 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"
37 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"
38 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"
39 I.import_module(token_contract).transfer_from(
40 main_account=ctx.caller,
41 amount=tokens_for_sale,
42 to=ctx.this)
43 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(
44 end_date_year, end_date_month, end_date_day, end_date_hour, end_date_minute), "softcap": softcap, "hardcap": hardcap, "max_buy": max_buy, "raised": 0, "tokens_for_sale": tokens_for_sale, "token_contract": token_contract, "seller": ctx.caller, "finalized": False, "success": False}
45 sales.set(sales.get() + "," + token_sale_id)
46
47 @export
48 def finalize(token_sale_id: str):
49 assert token_sales[token_sale_id]["finalized"] == False, "This sale is already finalized"
50 assert token_sales[token_sale_id]["end_date"] <= now, "The sale can only be finalized when the end date is reached"
51 assert token_sales[token_sale_id]["seller"] == ctx.caller or ctx.caller == operator.get(), "The sale can only be finalized by the seller"
52 if(token_sales[token_sale_id]["raised"] >= token_sales[token_sale_id]["softcap"]):
53 token_sales[token_sale_id]["success"] = True
54 I.import_module("currency").transfer(
55 amount=token_sales[token_sale_id]["raised"] - (token_sales[token_sale_id]["raised"] / 100 * end_fee.get()),
56 to=ctx.caller)
57 dev_fees.set(dev_fees.get() + (token_sales[token_sale_id]["raised"] / 100 * end_fee.get()))
58 else:
59 token_sales[token_sale_id]["success"] = False
60 token_sales[token_sale_id]["finalized"] = True
61
62 @export
63 def buy(token_sale_id: str, amount_to_invest: float):
64 assert token_sales[token_sale_id]["finalized"] == False, "This sale is already finalized"
65 assert token_sales[token_sale_id]["end_date"] > now, "The end date is already reached"
66 assert token_sales[token_sale_id]["raised"] + amount_to_invest <= token_sales[token_sale_id]["hardcap"], "This buy would exceed the sale hardcap"
67 assert investments[token_sale_id, ctx.caller] + amount_to_invest <= token_sales[token_sale_id]["max_buy"], "You are not allowed to buy that much"
68 assert amount_to_invest > 0, "The buy amount needs to be over 0"
69
70 I.import_module("currency").transfer_from(
71 main_account=ctx.caller,
72 amount=amount_to_invest,
73 to=ctx.this)
74 token_sales[token_sale_id]["raised"] += amount_to_invest
75 investments[token_sale_id, ctx.caller] += amount_to_invest
76
77 @export
78 def claim(token_sale_id: str):
79 assert token_sales[token_sale_id]["finalized"] == True, "This sale needs to be finalized first"
80 if(token_sales[token_sale_id]["success"] == True):
81 I.import_module(token_sales[token_sale_id]["token_contract"]).transfer(
82 amount=token_sales[token_sale_id]["hardcap"] / token_sales[token_sale_id]["tokens_for_sale"] * investments[token_sale_id, ctx.caller],
83 to=ctx.caller)
84 investments[token_sale_id, ctx.caller] = 0
85 elif(token_sales[token_sale_id]["success"] == False):
86 I.import_module("currency").transfer(
87 amount=investments[token_sale_id, ctx.caller],
88 to=ctx.caller)
89 investments[token_sale_id, ctx.caller] = 0
90
91 @export
92 def admin_fee_claim(amount: float):
93 assert ctx.caller == operator.get(), "You are not the operator"
94 I.import_module("currency").transfer(
95 amount=amount,
96 to=ctx.caller)
97
98
99

Byte Code

e3000000000000000000000000110000004000000073f000000065005a0165026a0383000100650464006401640264038d035a05650464006401640464038d035a0665076401640564068d025a0865076401640764068d025a0965076401640864068d025a0a65076401640964068d025a0b640a640b84005a0c650d64018301650e650e650e650e650e650f650f650f650f6510650e650e650e650e650e640c9c0f640d640e840483015a11650d640183016510640f9c0164106411840483015a12650d640183016510650f64129c0264136414840483015a13650d640183016510640f9c0164156416840483015a14650d64018301650f64179c0164186419840483015a15641a5300291be900000000da0f636f6e5f6c61756e63687061645f34da0b746f6b656e5f73616c65732903da0d64656661756c745f76616c7565da08636f6e7472616374da046e616d65da0b696e766573746d656e7473da0573616c6573290272050000007206000000da07656e645f666565da086f70657261746f72da086465765f66656573630000000000000000000000000200000043000000732200000074006a0164018301010074026a0164028301010074036a016403830101006400530029044ee905000000da4066663631353434656139346561616562356466303865643836336334613933386539313239616261366365656535663331623636383162646564653131623839da044e6f6e652904da095f5f656e645f666565da03736574da0a5f5f6f70657261746f72da075f5f73616c6573a90072130000007213000000da00da045f5f5f5f0d000000730800000000010a01040106017215000000290fda0e73746172745f646174655f646179da1073746172745f646174655f6d6f6e7468da0f73746172745f646174655f79656172da0f73746172745f646174655f686f7572da1173746172745f646174655f6d696e757465da07736f6674636170da0768617264636170da076d61785f627579da0f746f6b656e735f666f725f73616c65da0e746f6b656e5f636f6e7472616374da0c656e645f646174655f646179da0e656e645f646174655f6d6f6e7468da0d656e645f646174655f79656172da0d656e645f646174655f686f7572da0f656e645f646174655f6d696e757465630f00000000000000100000000c000000430000007314010000740074016a0264016402830283017d0f7c0f74036a0483006a05640383016b07732a74066404830182017c0864016b04733a740664058301820174076a077c027c017c007c037c04830574086b047358740664068301820174076a077c0c7c0b7c0a7c0d7c0e830574086b047376740664078301820174076a077c0c7c0b7c0a7c0d7c0e830574076a077c027c017c007c037c0483056b0473a2740664088301820174096a0a7c0983016a0b740c6a0d7c08740c6a0e64098d03010074076a077c027c017c007c037c04830574076a077c0c7c0b7c0a7c0d7c0e83057c057c067c0764017c087c09740c6a0d640a640a640b9c0b740f7c0f3c0074036a1074036a048300640317007c0f17008301010064005300290c4e72010000006900e1f505fa012c7a0954727920616761696e7a2354686520746f6b656e20616d6f756e74206e6565647320746f206265206f76657220307a23546865207374617274206e6565647320746f20626520696e20746865206675747572657a2154686520656e64206e6565647320746f20626520696e20746865206675747572657a2254686520656e642063616e6e6f74206265206265666f7265207468652073746172742903da0c6d61696e5f6163636f756e74da06616d6f756e74da02746f46290bda0a73746172745f64617465da08656e645f64617465721b000000721c000000721d000000da06726169736564721e000000721f000000da0673656c6c6572da0966696e616c697a6564da07737563636573732911da03737472da0672616e646f6dda0772616e64696e747212000000da03676574da0573706c6974da0e417373657274696f6e4572726f72da086461746574696d65da036e6f77da0149da0d696d706f72745f6d6f64756c65da0d7472616e736665725f66726f6dda03637478da0663616c6c6572da0474686973da0d5f5f746f6b656e5f73616c6573721000000029107216000000721700000072180000007219000000721a000000721b000000721c000000721d000000721e000000721f00000072200000007221000000722200000072230000007224000000da0d746f6b656e5f73616c655f6964721300000072130000007214000000da0b6372656174655f73616c65140000007330000000000610011a011001080108010e010a0106010e010a010c01100106010e010c01040108010a010a010601040108010c01723f0000002901723e00000063010000000000000001000000040000004300000073f600000074007c0019006401190064026b027318740164038301820174007c0019006404190074026b017330740164058301820174007c0019006406190074036a046b02735874036a0474056a0683006b027358740164078301820174007c0019006408190074007c001900640919006b0572da640a74007c001900640b3c0074076a08640c83016a0974007c0019006408190074007c00190064081900640d1b00740a6a0683001400180074036a04640e8d020100740b6a0c740b6a06830074007c00190064081900640d1b00740a6a06830014001700830101006e0c640274007c001900640b3c00640a74007c00190064013c0064005300290f4e722d000000467a1e546869732073616c6520697320616c72656164792066696e616c697a6564722a0000007a3b5468652073616c652063616e206f6e6c792062652066696e616c697a6564207768656e2074686520656e6420646174652069732072656163686564722c0000007a2c5468652073616c652063616e206f6e6c792062652066696e616c697a6564206279207468652073656c6c6572722b000000721b00000054722e000000da0863757272656e6379e964000000290272270000007228000000290d723d00000072340000007236000000723a000000723b0000007211000000723200000072370000007238000000da087472616e73666572720f000000da0a5f5f6465765f6665657372100000002901723e000000721300000072130000007214000000da0866696e616c697a6534000000732200000000020a010e010a010e010a0118010601100108010c010c01080122010a011e020c0172440000002902723e000000da10616d6f756e745f746f5f696e7665737463020000000000000002000000050000004300000073d200000074007c0019006401190064026b027318740164038301820174007c0019006404190074026b047330740164058301820174007c001900640619007c01170074007c001900640719006b017354740164088301820174037c0074046a05660219007c01170074007c001900640919006b01737a7401640a830182017c01640b6b04738a7401640c8301820174066a07640d83016a0874046a057c0174046a09640e8d03010074007c0019006406050019007c01370003003c0074037c0074046a056602050019007c01370003003c0064005300290f4e722d000000467a1e546869732073616c6520697320616c72656164792066696e616c697a6564722a0000007a1f54686520656e64206461746520697320616c72656164792072656163686564722b000000721c0000007a26546869732062757920776f756c6420657863656564207468652073616c652068617264636170721d0000007a24596f7520617265206e6f7420616c6c6f77656420746f206275792074686174206d75636872010000007a215468652062757920616d6f756e74206e6565647320746f206265206f766572203072400000002903722600000072270000007228000000290a723d00000072340000007236000000da0d5f5f696e766573746d656e7473723a000000723b000000723700000072380000007239000000723c0000002902723e0000007245000000721300000072130000007214000000da036275794a000000731e00000000020a010e010a010e010a01140106010c011401060110010e010c011401724700000063010000000000000001000000050000004300000073ba00000074007c0019006401190064026b027318740164038301820174007c0019006404190064026b02727874026a0374007c0019006405190083016a0474007c0019006406190074007c001900640719001b0074057c0074066a0766021900140074066a0764088d020100640974057c0074066a0766023c006e3e74007c00190064041900640a6b0272b674026a03640b83016a0474057c0074066a076602190074066a0764088d020100640974057c0074066a0766023c0064005300290c4e722d000000547a25546869732073616c65206e6565647320746f2062652066696e616c697a6564206669727374722e000000721f000000721c000000721e00000029027227000000722800000072010000004672400000002908723d00000072340000007237000000723800000072420000007246000000723a000000723b0000002901723e000000721300000072130000007214000000da05636c61696d5d000000731600000000020a010e011001120218011601100110010c011401724800000029017227000000630100000000000000010000000400000043000000733000000074006a0174026a0383006b027316740464018301820174056a06640283016a077c0074006a0164038d0201006400530029044e7a18596f7520617265206e6f7420746865206f70657261746f7272400000002902722700000072280000002908723a000000723b00000072110000007232000000723400000072370000007238000000724200000029017227000000721300000072130000007214000000da0f61646d696e5f6665655f636c61696d6d00000073040000000002160172490000004e2916da09696d706f72746c696272370000007230000000da0473656564da0448617368723d0000007246000000da085661726961626c657212000000720f000000721100000072430000007215000000da085f5f6578706f7274da03696e74da05666c6f6174722f000000723f00000072440000007247000000724800000072490000007213000000721300000072130000007214000000da083c6d6f64756c653e0100000073300000000401080106010801060108010c010c010c010c03080706010401080106010801121b06011015060112120601100f0601