Contract con_gold_ticket


Contract Code


  
1 import currency as tau
2 import con_gold_contract as gold
3
4 random.seed()
5
6 # Owner of this contract
7 owner = Variable()
8 # Percent of total pool that goes to dev fund
9 dev_share = Variable()
10 # Percent of total pool that goes to endogen
11 endo_share = Variable()
12 # Amount of TAU needed to participate
13 tau_amount = Variable()
14 # Max users that can participate in one draw
15 max_entries = Variable()
16 # How often can one user participate in one draw
17 user_tickets = Variable()
18 # Total TAU amount of current run
19 tau_balance = Variable()
20 # Total GOLD amount of current run
21 gold_balance = Variable()
22 # Overall amount of TAU for Endogen
23 endo_tau = Variable()
24 # Overall amount of GOLD for Endogen
25 endo_gold = Variable()
26 # Overall amount of TAU for devs
27 dev_tau = Variable()
28 # Overall amount of GOLD for devs
29 dev_gold = Variable()
30 # List of players for current run
31 user_list = Variable()
32 # Last won amount of TAU
33 last_won_tau = Variable()
34 # Last won amount of GOLD
35 last_won_gold = Variable()
36
37 @construct
38 def init():
39 owner.set(ctx.caller)
40 dev_share.set(9)
41 endo_share.set(1)
42 tau_amount.set(1)
43 max_entries.set(2)
44 user_tickets.set(2)
45 tau_balance.set(0)
46 gold_balance.set(0)
47 endo_tau.set(0)
48 endo_gold.set(0)
49 dev_tau.set(0)
50 dev_gold.set(0)
51 user_list.set([])
52 last_won_tau.set(0)
53 last_won_gold.set(0)
54
55 @export
56 def buy_ticket():
57 error = "Max users reached. Waiting for next draw."
58 assert len(user_list.get()) <= max_entries.get(), error
59
60 tickets = {i:user_list.get().count(i) for i in user_list.get()}
61
62 if ctx.caller in tickets:
63 error = "Max amount of tickets per user reached"
64 assert tickets[ctx.caller] <= user_tickets.get(), error
65
66 # Transfer TAU from user to contract
67 tau.transfer_from(
68 amount=tau_amount.get(),
69 to=ctx.this,
70 main_account=ctx.caller)
71
72 tau_balance.set(tau_balance.get() + tau_amount.get())
73
74 gold_price = ForeignHash(
75 foreign_contract='con_rocketswap_official_v1_1',
76 foreign_name='prices')
77
78 gold_amount = tau_amount.get() / gold_price["con_gold_contract"]
79
80 # Transfer GOLD from user to contract
81 gold.transfer_from(
82 amount=gold_amount,
83 to=ctx.this,
84 main_account=ctx.caller)
85
86 gold_balance.set(gold_balance.get() + gold_amount)
87
88 users = user_list.get()
89 users.append(ctx.caller)
90 user_list.set(users)
91
92 @export
93 def draw_winner():
94 allowed = [
95 "ae7d14d6d9b8443f881ba6244727b69b681010e782d4fe482dbfb0b6aca02d5d",
96 "aed1eb42d24ccaff3a6264bc07da12170208bbba37b773603b90309ee3fd8b3d",
97 ]
98
99 error = "Only owner can draw a winner"
100 assert ctx.caller in allowed, error
101
102 # Determine winner address
103 winner = random.choice(user_list.get())
104
105 dev_amount_tau = tau_balance.get() / 100 * dev_share.get()
106 dev_tau.set(dev_tau.get() + dev_amount_tau)
107
108 dev_amount_gold = gold_balance.get() / 100 * dev_share.get()
109 dev_gold.set(dev_gold.get() + dev_amount_gold)
110
111 endo_amount_tau = tau_balance.get() / 100 * endo_share.get()
112 endo_tau.set(endo_tau.get() + endo_amount_tau)
113
114 endo_amount_gold = gold_balance.get() / 100 * endo_share.get()
115 endo_gold.set(endo_gold.get() + endo_amount_gold)
116
117 last_won_tau.set(tau_balance.get() - dev_amount_tau - endo_amount_tau)
118 last_won_gold.set(gold_balance.get() - dev_amount_gold - endo_amount_gold)
119
120 # Transfer TAU from contract to winner
121 tau.transfer(
122 amount=last_won_tau.get(),
123 to=winner)
124
125 # Transfer GOLD from contract to winner
126 gold.transfer(
127 amount=last_won_gold.get(),
128 to=winner)
129
130 # Prepare for next run
131 tau_balance.set(0)
132 gold_balance.set(0)
133 user_list.set([])
134
135 return winner
136
137 @export
138 def set_dev_share(percent: float):
139 error = "Only owner can adjust developer share"
140 assert ctx.caller == owner.get(), error
141
142 error = "Share can't be less than 0 or more than 100"
143 assert (percent >= 0 and percent <=100), error
144
145 dev_share.set(percent)
146
147 @export
148 def set_endo_share(percent: float):
149 error = "Only owner can adjust Endogens share"
150 assert ctx.caller == owner.get(), error
151
152 error = "Share can't be less than 0 or more than 100"
153 assert (percent >= 0 and percent <=100), error
154
155 endo_share.set(percent)
156
157 @export
158 def set_tau_amount(amount: int):
159 error = "Only owner can adjust TAU amount"
160 assert ctx.caller == owner.get(), error
161
162 error = "Amount of TAU can't be negative"
163 assert amount >= 0, error
164
165 tau_amount.set(amount)
166
167 @export
168 def set_max_entries(count: int):
169 error = "Only owner can adjust max entries"
170 assert ctx.caller == owner.get(), error
171
172 error = "Max number of entries must be more than 1"
173 assert count > 1, error
174
175 max_entries.set(count)
176
177 @export
178 def set_user_tickets(tickets: int):
179 error = "Only owner can adjust number of user tickets"
180 assert ctx.caller == owner.get(), error
181
182 error = "Max tickets per user must be more than 0"
183 assert tickets >= 1, error
184
185 user_tickets.set(tickets)
186
187 @export
188 def endo_payout():
189 error = "Payout only available for owner"
190 assert ctx.caller == owner.get(), error
191
192 # Transfer TAU from contract to Endogen
193 tau.transfer(
194 amount=endo_tau,
195 to=ctx.caller)
196
197 endo_tau.set(0)
198
199 # Transfer GOLD from contract to Endogen
200 gold.transfer(
201 amount=endo_gold,
202 to=ctx.caller)
203
204 endo_gold.set(0)
205
206 @export
207 def dev_payout():
208 address = "96dae3b6213fb80eac7c6f4fa0fd26f34022741c56773107b20199cb43f5ed62"
209
210 error = "Payout only available for owner"
211 assert ctx.caller == address, error
212
213 # Transfer TAU from contract to Lamden devs
214 tau.transfer(
215 amount=dev_tau,
216 to=ctx.caller)
217
218 dev_tau.set(0)
219
220 # Transfer GOLD from contract to Lamden devs
221 gold.transfer(
222 amount=dev_gold,
223 to=ctx.caller)
224
225 dev_gold.set(0)

Byte Code

e300000000000000000000000004000000400000007386010000640064016c005a01640064016c025a0365046a058300010065066402640364048d025a0765066402640564048d025a0865066402640664048d025a0965066402640764048d025a0a65066402640864048d025a0b65066402640964048d025a0c65066402640a64048d025a0d65066402640b64048d025a0e65066402640c64048d025a0f65066402640d64048d025a1065066402640e64048d025a1165066402640f64048d025a1265066402641064048d025a1365066402641164048d025a1465066402641264048d025a156413641484005a1665176402830164156416840083015a1865176402830164176418840083015a19651764028301651a64199c01641a641b840483015a1b651764028301651a64199c01641c641d840483015a1c651764028301651d641e9c01641f6420840483015a1e651764028301651d64219c0164226423840483015a1f651764028301651d64249c0164256426840483015a2065176402830164276428840083015a216517640283016429642a840083015a2264015300292be9000000004eda0f636f6e5f676f6c645f7469636b6574da056f776e65722902da08636f6e7472616374da046e616d65da096465765f7368617265da0a656e646f5f7368617265da0a7461755f616d6f756e74da0b6d61785f656e7472696573da0c757365725f7469636b657473da0b7461755f62616c616e6365da0c676f6c645f62616c616e6365da08656e646f5f746175da09656e646f5f676f6c64da076465765f746175da086465765f676f6c64da09757365725f6c697374da0c6c6173745f776f6e5f746175da0d6c6173745f776f6e5f676f6c64630000000000000000000000000200000043000000739c00000074006a0174026a038301010074046a0164018301010074056a0164028301010074066a0164028301010074076a0164038301010074086a0164038301010074096a01640483010100740a6a01640483010100740b6a01640483010100740c6a01640483010100740d6a01640483010100740e6a01640483010100740f6a0167008301010074106a0164048301010074116a016404830101006400530029054ee909000000e901000000e90200000072010000002912da075f5f6f776e6572da03736574da03637478da0663616c6c6572da0b5f5f6465765f7368617265da0c5f5f656e646f5f7368617265da0c5f5f7461755f616d6f756e74da0d5f5f6d61785f656e7472696573da0e5f5f757365725f7469636b657473da0d5f5f7461755f62616c616e6365da0e5f5f676f6c645f62616c616e6365da0a5f5f656e646f5f746175da0b5f5f656e646f5f676f6c64da095f5f6465765f746175da0a5f5f6465765f676f6c64da0b5f5f757365725f6c697374da0e5f5f6c6173745f776f6e5f746175da0f5f5f6c6173745f776f6e5f676f6c64a90072290000007229000000da00da045f5f5f5f15000000731e00000000010c010a010a010a010a010a010a010a010a010a010a010a010a010a01722b00000063000000000000000005000000060000004300000073f000000064017d00740074016a028300830174036a0283006b01732074047c008301820164026403840074016a028300440083017d0174056a067c016b06725a64047d007c0174056a06190074076a0283006b01735a74047c008301820174086a09740a6a02830074056a0b74056a0664058d030100740c6a0d740c6a028300740a6a028300170083010100740e6406640764086409640a8d047d02740a6a0283007c02640b19001b007d03740f6a097c0374056a0b74056a0664058d03010074106a0d74106a0283007c0317008301010074016a0283007d047c046a1174056a068301010074016a0d7c048301010064005300290c4e7a294d617820757365727320726561636865642e2057616974696e6720666f72206e65787420647261772e630100000000000000020000000400000053000000731c00000069007c005d147d0174006a0183006a027c0183017c01930271045300722900000029037226000000da03676574da05636f756e742902da022e30da016972290000007229000000722a000000fa0a3c64696374636f6d703e2b000000730200000006007a1e6275795f7469636b65742e3c6c6f63616c733e2e3c64696374636f6d703e7a264d617820616d6f756e74206f66207469636b65747320706572207573657220726561636865642903da06616d6f756e74da02746fda0c6d61696e5f6163636f756e74da1c636f6e5f726f636b6574737761705f6f6666696369616c5f76315f31da067072696365737202000000da0a676f6c645f70726963652904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d6572040000007205000000da11636f6e5f676f6c645f636f6e74726163742912da036c656e7226000000722c000000721e000000da0e417373657274696f6e4572726f727219000000721a000000721f000000da03746175da0d7472616e736665725f66726f6d721d000000da047468697372200000007218000000da0b466f726569676e48617368da04676f6c647221000000da06617070656e642905da056572726f72da077469636b657473da0c5f5f676f6c645f7072696365da0b676f6c645f616d6f756e74da05757365727372290000007229000000722a000000da0a6275795f7469636b6574270000007324000000000204011c0112010a0104011a010e010a011601020104010a0110011402120108010c01724700000063000000000000000007000000040000004300000073360100006401640267027d0064037d0174006a017c006b06731e74027c018301820174036a0474056a06830083017d0274076a06830064041b0074086a06830014007d0374096a0a74096a0683007c03170083010100740b6a06830064041b0074086a06830014007d04740c6a0a740c6a0683007c0417008301010074076a06830064041b00740d6a06830014007d05740e6a0a740e6a0683007c05170083010100740b6a06830064041b00740d6a06830014007d06740f6a0a740f6a0683007c0617008301010074106a0a74076a0683007c0318007c0518008301010074116a0a740b6a0683007c0418007c0618008301010074126a1374106a0683007c0264058d02010074146a1374116a0683007c0264058d02010074076a0a640683010100740b6a0a64068301010074056a0a6700830101007c02530029074eda4061653764313464366439623834343366383831626136323434373237623639623638313031306537383264346665343832646266623062366163613032643564da40616564316562343264323463636166663361363236346263303764613132313730323038626262613337623737333630336239303330396565336664386233647a1c4f6e6c79206f776e65722063616e206472617720612077696e6e6572e964000000290272310000007232000000720100000029157219000000721a000000723b000000da0672616e646f6dda0663686f6963657226000000722c0000007220000000721b0000007224000000721800000072210000007225000000721c0000007222000000722300000072270000007228000000723c000000da087472616e7366657272400000002907da07616c6c6f7765647242000000da0677696e6e6572da0e6465765f616d6f756e745f746175da0f6465765f616d6f756e745f676f6c64da0f656e646f5f616d6f756e745f746175da10656e646f5f616d6f756e745f676f6c6472290000007229000000722a000000da0b647261775f77696e6e65723e000000732c000000000302010601040112010e011401120114011201140112011401120116010e010801120112010a010a010a0172540000002901da0770657263656e74630100000000000000020000000200000043000000734400000064017d0174006a0174026a0383006b02731a74047c018301820164027d017c0064036b05722e7c0064046b01733674047c018301820174056a067c00830101006400530029054e7a254f6e6c79206f776e65722063616e2061646a75737420646576656c6f7065722073686172657a2b53686172652063616e2774206265206c657373207468616e2030206f72206d6f7265207468616e203130307201000000724a00000029077219000000721a0000007217000000722c000000723b000000721b000000721800000029027255000000724200000072290000007229000000722a000000da0d7365745f6465765f736861726559000000730a000000000204011601040118017256000000630100000000000000020000000200000043000000734400000064017d0174006a0174026a0383006b02731a74047c018301820164027d017c0064036b05722e7c0064046b01733674047c018301820174056a067c00830101006400530029054e7a244f6e6c79206f776e65722063616e2061646a75737420456e646f67656e732073686172657a2b53686172652063616e2774206265206c657373207468616e2030206f72206d6f7265207468616e203130307201000000724a00000029077219000000721a0000007217000000722c000000723b000000721c000000721800000029027255000000724200000072290000007229000000722a000000da0e7365745f656e646f5f736861726562000000730a00000000020401160104011801725700000029017231000000630100000000000000020000000200000043000000733c00000064017d0174006a0174026a0383006b02731a74047c018301820164027d017c0064036b05732e74047c018301820174056a067c00830101006400530029044e7a204f6e6c79206f776e65722063616e2061646a7573742054415520616d6f756e747a1f416d6f756e74206f66205441552063616e2774206265206e65676174697665720100000029077219000000721a0000007217000000722c000000723b000000721d000000721800000029027231000000724200000072290000007229000000722a000000da0e7365745f7461755f616d6f756e746b000000730a0000000002040116010401100172580000002901722d000000630100000000000000020000000200000043000000733c00000064017d0174006a0174026a0383006b02731a74047c018301820164027d017c0064036b04732e74047c018301820174056a067c00830101006400530029044e7a214f6e6c79206f776e65722063616e2061646a757374206d617820656e74726965737a294d6178206e756d626572206f6620656e7472696573206d757374206265206d6f7265207468616e2031721500000029077219000000721a0000007217000000722c000000723b000000721e00000072180000002902722d000000724200000072290000007229000000722a000000da0f7365745f6d61785f656e747269657374000000730a00000000020401160104011001725900000029017243000000630100000000000000020000000200000043000000733c00000064017d0174006a0174026a0383006b02731a74047c018301820164027d017c0064036b05732e74047c018301820174056a067c00830101006400530029044e7a2c4f6e6c79206f776e65722063616e2061646a757374206e756d626572206f662075736572207469636b6574737a284d6178207469636b657473207065722075736572206d757374206265206d6f7265207468616e2030721500000029077219000000721a0000007217000000722c000000723b000000721f000000721800000029027243000000724200000072290000007229000000722a000000da107365745f757365725f7469636b6574737d000000730a00000000020401160104011001725a000000630000000000000000010000000400000043000000735200000064017d0074006a0174026a0383006b02731a74047c008301820174056a06740774006a0164028d02010074076a0864038301010074096a06740a74006a0164028d020100740a6a086403830101006400530029044e7a1f5061796f7574206f6e6c7920617661696c61626c6520666f72206f776e65722902723100000072320000007201000000290b7219000000721a0000007217000000722c000000723b000000723c000000724d00000072220000007218000000724000000072230000002901724200000072290000007229000000722a000000da0b656e646f5f7061796f757486000000730c00000000020401160110010a011001725b000000630000000000000000020000000400000043000000735200000064017d0064027d0174006a017c006b02731a74027c018301820174036a04740574006a0164038d02010074056a0664048301010074076a04740874006a0164038d02010074086a066404830101006400530029054eda40393664616533623632313366623830656163376336663466613066643236663334303232373431633536373733313037623230313939636234336635656436327a1f5061796f7574206f6e6c7920617661696c61626c6520666f72206f776e6572290272310000007232000000720100000029097219000000721a000000723b000000723c000000724d00000072240000007218000000724000000072250000002902da0761646472657373724200000072290000007229000000722a000000da0a6465765f7061796f757490000000730e000000000304010401120110010a011001725e0000002923da0863757272656e6379723c00000072390000007240000000724b000000da0473656564da085661726961626c657217000000721b000000721c000000721d000000721e000000721f000000722000000072210000007222000000722300000072240000007225000000722600000072270000007228000000722b000000da085f5f6578706f727472470000007254000000da05666c6f617472560000007257000000da03696e7472580000007259000000725a000000725b000000725e000000722900000072290000007229000000722a000000da083c6d6f64756c653e0100000073400000000801080108010c010c010c010c010c010c010c010c010c010c010c010c010c010c010c0308121017101b0601100806011008060110080601100806011008100a