Contract con_launchpad_3


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
22
23 @construct
24 def seed():
25 end_fee.set(5)
26 operator.set(
27 "ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89")
28 sales.set("")
29
30 @export
31 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):
32 token_sale_id = str(random.randint(0, 100000000))
33 assert token_sale_id not in sales.get().split(','), "Try again"
34 assert tokens_for_sale > 0, "The token amount needs to be over 0"
35 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"
36 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"
37 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"
38 I.import_module(token_contract).transfer_from(
39 main_account=ctx.caller,
40 amount=tokens_for_sale,
41 to=ctx.this)
42 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(
43 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}
44 sales.set(sales.get() + "," + token_sale_id)
45
46 @export
47 def finalize(token_sale_id: str):
48 assert token_sales[token_sale_id]["finalized"] == False, "This sale is already finalized"
49 assert token_sales[token_sale_id]["end_date"] <= now, "The sale can only be finalized when the end date is reached"
50 assert token_sales[token_sale_id]["seller"] == ctx.caller or ctx.caller == operator.get(), "The sale can only be finalized by the seller"
51 if(token_sales[token_sale_id]["raised"] >= token_sales[token_sale_id]["softcap"]):
52 token_sales[token_sale_id]["success"] = True
53 I.import_module("currency").transfer(
54 amount=token_sales[token_sale_id]["raised"] - (token_sales[token_sale_id]["raised"] / 100 * end_fee.get()),
55 to=ctx.caller)
56 else:
57 token_sales[token_sale_id]["success"] = False
58 token_sales[token_sale_id]["finalized"] = True
59
60 @export
61 def buy(token_sale_id: str, amount_to_invest: float):
62 assert token_sales[token_sale_id]["finalized"] == False, "This sale is already finalized"
63 assert token_sales[token_sale_id]["end_date"] > now, "The end date is already reached"
64 assert token_sales[token_sale_id]["raised"] + amount_to_invest <= token_sales[token_sale_id]["hardcap"], "This buy would exceed the sale hardcap"
65 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"
66 assert amount_to_invest > 0, "The buy amount needs to be over 0"
67
68 I.import_module("currency").transfer_from(
69 main_account=ctx.caller,
70 amount=amount_to_invest,
71 to=ctx.this)
72 token_sales[token_sale_id]["raised"] += amount_to_invest
73 investments[token_sale_id, ctx.caller] += amount_to_invest
74
75 @export
76 def claim(token_sale_id: str):
77 assert token_sales[token_sale_id]["finalized"] == True, "This sale needs to be finalized first"
78 if(token_sales[token_sale_id]["success"] == True):
79 I.import_module(token_sales[token_sale_id]["token_contract"]).transfer(
80 amount=token_sales[token_sale_id]["hardcap"] / token_sales[token_sale_id]["tokens_for_sale"] * investments[token_sale_id, ctx.caller],
81 to=ctx.caller)
82 investments[token_sale_id, ctx.caller] = 0
83 elif(token_sales[token_sale_id]["success"] == False):
84 I.import_module("currency").transfer(
85 amount=investments[token_sale_id, ctx.caller],
86 to=ctx.caller)
87 investments[token_sale_id, ctx.caller] = 0
88
89
90
91

Byte Code

e3000000000000000000000000110000004000000073ce00000065005a0165026a0383000100650464006401640264038d035a05650464006401640464038d035a0665076401640564068d025a0865076401640764068d025a0965076401640864068d025a0a6409640a84005a0b650c64018301650d650d650d650d650d650e650e650e650e650f650d650d650d650d650d640b9c0f640c640d840483015a10650c64018301650f640e9c01640f6410840483015a11650c64018301650f650e64119c0264126413840483015a12650c64018301650f640e9c0164146415840483015a13641653002917e900000000da0f636f6e5f6c61756e63687061645f33da0b746f6b656e5f73616c65732903da0d64656661756c745f76616c7565da08636f6e7472616374da046e616d65da0b696e766573746d656e7473da0573616c6573290272050000007206000000da07656e645f666565da086f70657261746f72630000000000000000000000000200000043000000732200000074006a0164018301010074026a0164028301010074036a016403830101006400530029044ee905000000da4066663631353434656139346561616562356466303865643836336334613933386539313239616261366365656535663331623636383162646564653131623839da002904da095f5f656e645f666565da03736574da0a5f5f6f70657261746f72da075f5f73616c6573a90072120000007212000000720d000000da045f5f5f5f0c000000730800000000010a01040106017213000000290fda0e73746172745f646174655f646179da1073746172745f646174655f6d6f6e7468da0f73746172745f646174655f79656172da0f73746172745f646174655f686f7572da1173746172745f646174655f6d696e757465da07736f6674636170da0768617264636170da076d61785f627579da0f746f6b656e735f666f725f73616c65da0e746f6b656e5f636f6e7472616374da0c656e645f646174655f646179da0e656e645f646174655f6d6f6e7468da0d656e645f646174655f79656172da0d656e645f646174655f686f7572da0f656e645f646174655f6d696e757465630f00000000000000100000000c000000430000007314010000740074016a0264016402830283017d0f7c0f74036a0483006a05640383016b07732a74066404830182017c0864016b04733a740664058301820174076a077c027c017c007c037c04830574086b047358740664068301820174076a077c0c7c0b7c0a7c0d7c0e830574086b047376740664078301820174076a077c0c7c0b7c0a7c0d7c0e830574076a077c027c017c007c037c0483056b0473a2740664088301820174096a0a7c0983016a0b740c6a0d7c08740c6a0e64098d03010074076a077c027c017c007c037c04830574076a077c0c7c0b7c0a7c0d7c0e83057c057c067c0764017c087c09740c6a0d640a640a640b9c0b740f7c0f3c0074036a1074036a048300640317007c0f17008301010064005300290c4e72010000006900e1f505fa012c7a0954727920616761696e7a2354686520746f6b656e20616d6f756e74206e6565647320746f206265206f76657220307a23546865207374617274206e6565647320746f20626520696e20746865206675747572657a2154686520656e64206e6565647320746f20626520696e20746865206675747572657a2254686520656e642063616e6e6f74206265206265666f7265207468652073746172742903da0c6d61696e5f6163636f756e74da06616d6f756e74da02746f46290bda0a73746172745f64617465da08656e645f646174657219000000721a000000721b000000da06726169736564721c000000721d000000da0673656c6c6572da0966696e616c697a6564da07737563636573732911da03737472da0672616e646f6dda0772616e64696e747211000000da03676574da0573706c6974da0e417373657274696f6e4572726f72da086461746574696d65da036e6f77da0149da0d696d706f72745f6d6f64756c65da0d7472616e736665725f66726f6dda03637478da0663616c6c6572da0474686973da0d5f5f746f6b656e5f73616c6573720f0000002910721400000072150000007216000000721700000072180000007219000000721a000000721b000000721c000000721d000000721e000000721f000000722000000072210000007222000000da0d746f6b656e5f73616c655f696472120000007212000000720d000000da0b6372656174655f73616c65130000007330000000000610011a011001080108010e010a0106010e010a010c01100106010e010c01040108010a010a010601040108010c01723d0000002901723c00000063010000000000000001000000040000004300000073d000000074007c0019006401190064026b027318740164038301820174007c0019006404190074026b017330740164058301820174007c0019006406190074036a046b02735874036a0474056a0683006b027358740164078301820174007c0019006408190074007c001900640919006b0572b4640a74007c001900640b3c0074076a08640c83016a0974007c0019006408190074007c00190064081900640d1b00740a6a0683001400180074036a04640e8d0201006e0c640274007c001900640b3c00640a74007c00190064013c0064005300290f4e722b000000467a1e546869732073616c6520697320616c72656164792066696e616c697a656472280000007a3b5468652073616c652063616e206f6e6c792062652066696e616c697a6564207768656e2074686520656e6420646174652069732072656163686564722a0000007a2c5468652073616c652063616e206f6e6c792062652066696e616c697a6564206279207468652073656c6c65727229000000721900000054722c000000da0863757272656e6379e964000000290272250000007226000000290b723b00000072320000007234000000723800000072390000007210000000723000000072350000007236000000da087472616e73666572720e0000002901723c00000072120000007212000000720d000000da0866696e616c697a6533000000731e00000000020a010e010a010e010a0118010601100108010c010c01080124020c0172410000002902723c000000da10616d6f756e745f746f5f696e7665737463020000000000000002000000050000004300000073d200000074007c0019006401190064026b027318740164038301820174007c0019006404190074026b047330740164058301820174007c001900640619007c01170074007c001900640719006b017354740164088301820174037c0074046a05660219007c01170074007c001900640919006b01737a7401640a830182017c01640b6b04738a7401640c8301820174066a07640d83016a0874046a057c0174046a09640e8d03010074007c0019006406050019007c01370003003c0074037c0074046a056602050019007c01370003003c0064005300290f4e722b000000467a1e546869732073616c6520697320616c72656164792066696e616c697a656472280000007a1f54686520656e64206461746520697320616c726561647920726561636865647229000000721a0000007a26546869732062757920776f756c6420657863656564207468652073616c652068617264636170721b0000007a24596f7520617265206e6f7420616c6c6f77656420746f206275792074686174206d75636872010000007a215468652062757920616d6f756e74206e6565647320746f206265206f7665722030723e0000002903722400000072250000007226000000290a723b00000072320000007234000000da0d5f5f696e766573746d656e747372380000007239000000723500000072360000007237000000723a0000002902723c000000724200000072120000007212000000720d000000da0362757947000000731e00000000020a010e010a010e010a01140106010c011401060110010e010c011401724400000063010000000000000001000000050000004300000073ba00000074007c0019006401190064026b027318740164038301820174007c0019006404190064026b02727874026a0374007c0019006405190083016a0474007c0019006406190074007c001900640719001b0074057c0074066a0766021900140074066a0764088d020100640974057c0074066a0766023c006e3e74007c00190064041900640a6b0272b674026a03640b83016a0474057c0074066a076602190074066a0764088d020100640974057c0074066a0766023c0064005300290c4e722b000000547a25546869732073616c65206e6565647320746f2062652066696e616c697a6564206669727374722c000000721d000000721a000000721c000000290272250000007226000000720100000046723e0000002908723b00000072320000007235000000723600000072400000007243000000723800000072390000002901723c00000072120000007212000000720d000000da05636c61696d5a000000731600000000020a010e011001120218011601100110010c01140172450000004e2914da09696d706f72746c69627235000000722e000000da0473656564da0448617368723b0000007243000000da085661726961626c657211000000720e00000072100000007213000000da085f5f6578706f7274da03696e74da05666c6f6174722d000000723d000000724100000072440000007245000000721200000072120000007212000000720d000000da083c6d6f64756c653e01000000732a0000000401080106010801060108010c010c010c03080706010401080106010801121b06011013060112120601