Contract con_gamma_phi_sales_v4


Contract Code


  
1 # con_gamma_phi_sales_v4
2 import currency as tau
3 import con_phi_lst001 as phi
4
5 tau_balances = ForeignHash(foreign_contract='currency', foreign_name='balances')
6
7 owner = Variable()
8
9 round_1_price = Variable()
10 round_1_quantity = Variable()
11
12 round_2_price = Variable()
13 round_2_quantity = Variable()
14
15
16 @construct
17 def seed():
18 round_1_price.set(0.002)
19 round_1_quantity.set(100_000_000)
20 round_2_price.set(0.004)
21 round_2_quantity.set(100_000_000)
22 owner.set(ctx.caller)
23
24
25 @export
26 def set_round_1_price(price: float):
27 error = "Only owner can update this"
28 assert ctx.caller == owner.get(), error
29
30 round_1_price.set(price)
31
32
33 @export
34 def set_round_2_price(price: float):
35 error = "Only owner can update this"
36 assert ctx.caller == owner.get(), error
37
38 round_2_price.set(price)
39
40
41 @export
42 def set_round_1_quantity(quantity: int):
43 error = "Only owner can update this"
44 assert ctx.caller == owner.get(), error
45
46 round_1_quantity.set(quantity)
47
48
49 @export
50 def set_round_2_quantity(quantity: int):
51 error = "Only owner can update this"
52 assert ctx.caller == owner.get(), error
53
54 round_2_quantity.set(quantity)
55
56
57 @export
58 def purchase_round_1(amount_tau: float):
59 assert amount_tau > 0, 'Cannot purchase negative amounts!'
60 purchaser = ctx.caller
61
62 assert tau_balances[purchaser] >= amount_tau, 'Not enough tau!'
63
64 amount = amount_tau / round_1_price.get()
65
66 assert round_1_quantity.get() > amount, 'Not enough remaining in round 1'
67
68 round_1_quantity.set(round_1_quantity.get() - amount)
69
70 tau.transfer_from(amount_tau, ctx.this, purchaser)
71 phi.transfer(amount, purchaser)
72
73
74 @export
75 def purchase_round_2(amount_tau: float):
76 assert amount_tau > 0, 'Cannot purchase negative amounts!'
77 purchaser = ctx.caller
78
79 assert tau_balances[purchaser] >= amount_tau, 'Not enough tau!'
80
81 amount = amount_tau / round_2_price.get()
82
83 assert round_2_quantity.get() > amount, 'Not enough remaining in round 1'
84
85 round_2_quantity.set(round_2_quantity.get() - amount)
86
87 tau.transfer_from(amount_tau, ctx.this, purchaser)
88 phi.transfer(amount, purchaser)
89
90 @export
91 def pay_out_phi(amount: float):
92 error = "Negative amount is not allowed"
93 assert amount > 0, error
94
95 error = "Only owner can payout tokens"
96 assert ctx.caller == owner.get(), error
97
98 # Transfer tokens from contract to owner
99 phi.transfer(
100 amount=amount,
101 to=ctx.caller)
102
103 @export
104 def pay_out_tau(amount: float):
105 error = "Negative amount is not allowed"
106 assert amount > 0, error
107
108 error = "Only owner can payout tokens"
109 assert ctx.caller == owner.get(), error
110
111 # Transfer tokens from contract to owner
112 tau.transfer(
113 amount=amount,
114 to=ctx.caller)
115
116 @export
117 def change_ownership(new_owner: str):
118 assert ctx.caller == owner.get(), 'Only the owner can change ownership!'
119
120 owner.set(new_owner)

Byte Code

e30000000000000000000000000600000040000000732e010000640064016c005a01640064016c025a036504640264036404640564068d045a0565066404640764088d025a0765066404640964088d025a0865066404640a64088d025a0965066404640b64088d025a0a65066404640c64088d025a0b640d640e84005a0c650d64048301650e640f9c0164106411840483015a0f650d64048301650e640f9c0164126413840483015a10650d64048301651164149c0164156416840483015a12650d64048301651164149c0164176418840483015a13650d64048301650e64199c01641a641b840483015a14650d64048301650e64199c01641c641d840483015a15650d64048301650e641e9c01641f6420840483015a16650d64048301650e641e9c0164216422840483015a17650d64048301651864239c0164246425840483015a19640153002926e9000000004eda0863757272656e6379da0862616c616e636573da16636f6e5f67616d6d615f7068695f73616c65735f7634da0c7461755f62616c616e6365732904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d65da08636f6e7472616374da046e616d65da056f776e6572290272080000007209000000da0d726f756e645f315f7072696365da10726f756e645f315f7175616e74697479da0d726f756e645f325f7072696365da10726f756e645f325f7175616e74697479630000000000000000000000000300000043000000734000000074006a017402640183018301010074036a0164028301010074046a017402640383018301010074056a0164028301010074066a0174076a08830101006400530029044e7a05302e3030326900e1f5057a05302e3030342909da0f5f5f726f756e645f315f7072696365da03736574da07646563696d616cda125f5f726f756e645f315f7175616e74697479da0f5f5f726f756e645f325f7072696365da125f5f726f756e645f325f7175616e74697479da075f5f6f776e6572da03637478da0663616c6c6572a90072180000007218000000da00da045f5f5f5f10000000730a00000000010e010a010e010a01721a0000002901da057072696365630100000000000000020000000200000043000000732800000064017d0174006a0174026a0383006b02731a74047c018301820174056a067c00830101006400530029024e7a1a4f6e6c79206f776e65722063616e2075706461746520746869732907721600000072170000007215000000da03676574da0e417373657274696f6e4572726f72720f00000072100000002902721b000000da056572726f72721800000072180000007219000000da117365745f726f756e645f315f7072696365180000007306000000000204011601721f000000630100000000000000020000000200000043000000732800000064017d0174006a0174026a0383006b02731a74047c018301820174056a067c00830101006400530029024e7a1a4f6e6c79206f776e65722063616e2075706461746520746869732907721600000072170000007215000000721c000000721d000000721300000072100000002902721b000000721e000000721800000072180000007219000000da117365745f726f756e645f325f70726963651f000000730600000000020401160172200000002901da087175616e74697479630100000000000000020000000200000043000000732800000064017d0174006a0174026a0383006b02731a74047c018301820174056a067c00830101006400530029024e7a1a4f6e6c79206f776e65722063616e2075706461746520746869732907721600000072170000007215000000721c000000721d0000007212000000721000000029027221000000721e000000721800000072180000007219000000da147365745f726f756e645f315f7175616e746974792600000073060000000002040116017222000000630100000000000000020000000200000043000000732800000064017d0174006a0174026a0383006b02731a74047c018301820174056a067c00830101006400530029024e7a1a4f6e6c79206f776e65722063616e2075706461746520746869732907721600000072170000007215000000721c000000721d0000007214000000721000000029027221000000721e000000721800000072180000007219000000da147365745f726f756e645f325f7175616e746974792d000000730600000000020401160172230000002901da0a616d6f756e745f746175630100000000000000030000000400000043000000737c0000007c0064016b047310740064028301820174016a027d0174037c0119007c006b05732a74006403830182017c0074046a0583001b007d0274066a0583007c026b04734a740064048301820174066a0774066a0583007c0218008301010074086a097c0074016a0a7c0183030100740b6a0c7c027c01830201006400530029054e72010000007a2143616e6e6f74207075726368617365206e6567617469766520616d6f756e7473217a0f4e6f7420656e6f75676820746175217a1f4e6f7420656e6f7567682072656d61696e696e6720696e20726f756e642031290d721d00000072160000007217000000da0e5f5f7461755f62616c616e636573720f000000721c00000072120000007210000000da03746175da0d7472616e736665725f66726f6dda0474686973da03706869da087472616e7366657229037224000000da09707572636861736572da06616d6f756e74721800000072180000007219000000da1070757263686173655f726f756e645f3134000000731000000000021001060114010c01140112011001722d000000630100000000000000030000000400000043000000737c0000007c0064016b047310740064028301820174016a027d0174037c0119007c006b05732a74006403830182017c0074046a0583001b007d0274066a0583007c026b04734a740064048301820174066a0774066a0583007c0218008301010074086a097c0074016a0a7c0183030100740b6a0c7c027c01830201006400530029054e72010000007a2143616e6e6f74207075726368617365206e6567617469766520616d6f756e7473217a0f4e6f7420656e6f75676820746175217a1f4e6f7420656e6f7567682072656d61696e696e6720696e20726f756e642031290d721d0000007216000000721700000072250000007213000000721c000000721400000072100000007226000000722700000072280000007229000000722a00000029037224000000722b000000722c000000721800000072180000007219000000da1070757263686173655f726f756e645f3240000000731000000000021001060114010c01140112011001722e0000002901722c000000630100000000000000020000000400000043000000734200000064017d017c0064026b04731474007c018301820164037d0174016a0274036a0483006b02732e74007c018301820174056a067c0074016a0264048d0201006400530029054e7a1e4e6567617469766520616d6f756e74206973206e6f7420616c6c6f77656472010000007a1c4f6e6c79206f776e65722063616e207061796f757420746f6b656e732902722c000000da02746f2907721d000000721600000072170000007215000000721c0000007229000000722a0000002902722c000000721e000000721800000072180000007219000000da0b7061795f6f75745f7068694c000000730a000000000204011001040116017230000000630100000000000000020000000400000043000000734200000064017d017c0064026b04731474007c018301820164037d0174016a0274036a0483006b02732e74007c018301820174056a067c0074016a0264048d0201006400530029054e7a1e4e6567617469766520616d6f756e74206973206e6f7420616c6c6f77656472010000007a1c4f6e6c79206f776e65722063616e207061796f757420746f6b656e732902722c000000722f0000002907721d000000721600000072170000007215000000721c0000007226000000722a0000002902722c000000721e000000721800000072180000007219000000da0b7061795f6f75745f74617555000000730a0000000002040110010401160172310000002901da096e65775f6f776e6572630100000000000000010000000200000043000000732400000074006a0174026a0383006b027316740464018301820174026a057c00830101006400530029024e7a244f6e6c7920746865206f776e65722063616e206368616e6765206f776e657273686970212906721600000072170000007215000000721c000000721d000000721000000029017232000000721800000072180000007219000000da106368616e67655f6f776e6572736869705e0000007304000000000216017233000000291a72020000007226000000da0e636f6e5f7068695f6c73743030317229000000da0b466f726569676e486173687225000000da085661726961626c657215000000720f000000721200000072130000007214000000721a000000da085f5f6578706f7274da05666c6f6174721f0000007220000000da03696e7472220000007223000000722d000000722e00000072300000007231000000da0373747272330000007218000000721800000072180000007219000000da083c6d6f64756c653e01000000733e0000000801080104010c010c01040108010401080104010801040108030808060110060601100606011006060110060601100b0601100b06011008060110080601