Contract con_gamma_phi_lottery_v1


Contract Code


  
1 import currency as tau
2 import con_phi as phi
3
4 phi_balances = ForeignHash(foreign_contract='con_phi', foreign_name='balances')
5
6 owner = Variable()
7
8 user_list = Variable()
9 total = Variable()
10
11 balances = Hash(default_value=0)
12
13 random.seed()
14
15 @construct
16 def seed():
17 user_list.set([])
18 total.set(0)
19 owner.set(ctx.caller)
20
21 @export
22 def deposit_phi(amount: int):
23 # 1 PHI == 1 lottery ticket
24 assert phi_balances[ctx.caller] >= amount, 'Insufficient funds!'
25
26 users = set(user_list.get())
27
28 users.add(ctx.caller)
29
30 user_list.set(list(users))
31
32 balances[ctx.caller] += amount
33
34 total.set(total.get() + amount)
35
36 phi.transfer_from(
37 amount=amount,
38 to=ctx.this,
39 main_account=ctx.caller)
40
41 @export
42 def draw_winner():
43 error = "Only the owner can draw a winner"
44 assert owner.get() == ctx.caller, error
45
46 total_tickets = total.get()
47
48 assert total_tickets > 0, "There is nothing to draw!"
49
50 lucky_number = random.randint(0, total_tickets-1)
51
52 users = user_list.get()
53
54 winner = None
55
56 amount = 0
57
58 for user in users:
59 amount += balances[user]
60 if lucky_number < amount:
61 winner = user
62 break
63
64 assert winner is not None, 'Unable to draw a valid user'
65
66 # Clear previous state
67 for user in users:
68 balances[user] = 0
69
70 user_list.set([])
71 total.set(0)
72
73 # Send out prize
74 phi.transfer(
75 amount=total_tickets,
76 to=winner)
77
78 @export
79 def change_ownership(new_owner: str):
80 assert ctx.caller == owner.get(), 'Only the owner can change ownership!'
81
82 owner.set(new_owner)
83
84 @export
85 def pay_out(amount: float):
86 error = "Negative amount is not allowed"
87 assert amount > 0, error
88
89 error = "Only owner can payout tokens"
90 assert ctx.caller == owner.get(), error
91
92 # Transfer tokens from contract to owner
93 phi.transfer(
94 amount=amount,
95 to=ctx.caller)

Byte Code

e3000000000000000000000000060000004000000073b8000000640064016c005a01640064016c025a036504640264036404640564068d045a0565066404640764088d025a0765066404640964088d025a0865066404640a64088d025a09650a640064046403640b8d035a0b650c6a0d83000100640c640d84005a0e650f640483016510640e9c01640f6410840483015a11650f6404830164116412840083015a12650f64048301651364139c0164146415840483015a14650f640483016515640e9c0164166417840483015a16640153002918e9000000004eda07636f6e5f706869da0862616c616e636573da18636f6e5f67616d6d615f7068695f6c6f74746572795f7631da0c7068695f62616c616e6365732904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d65da08636f6e7472616374da046e616d65da056f776e6572290272080000007209000000da09757365725f6c697374da05746f74616c2903da0d64656661756c745f76616c756572080000007209000000630000000000000000000000000200000043000000732400000074006a0167008301010074026a0164018301010074036a0174046a05830101006400530029024e72010000002906da0b5f5f757365725f6c697374da03736574da075f5f746f74616cda075f5f6f776e6572da03637478da0663616c6c6572a90072140000007214000000da00da045f5f5f5f0d000000730600000000010a010a0172160000002901da06616d6f756e746301000000000000000200000005000000430000007378000000740074016a0219007c006b0573167403640183018201740474056a06830083017d017c016a0774016a028301010074056a0474087c01830183010100740974016a02050019007c00370003003c00740a6a04740a6a0683007c00170083010100740b6a0c7c0074016a0d74016a0264028d0301006400530029034e7a13496e73756666696369656e742066756e64732129037217000000da02746fda0c6d61696e5f6163636f756e74290eda0e5f5f7068695f62616c616e63657372120000007213000000da0e417373657274696f6e4572726f72720f000000720e000000da03676574da03616464da046c697374da0a5f5f62616c616e6365737210000000da03706869da0d7472616e736665725f66726f6dda047468697329027217000000da057573657273721400000072140000007215000000da0b6465706f7369745f70686913000000730e000000000216010c010c010e0112011201722400000063000000000000000007000000040000004300000073c600000064017d0074006a01830074026a036b02731a74047c008301820174056a0183007d017c0164026b047332740464038301820174066a0764027c016404180083027d0274086a0183007d0364007d0464027d0578267c0344005d1e7d067c0574097c06190037007d057c027c056b0072587c067d045000715857007c0464006b09738a740464058301820178147c0344005d0c7d06640274097c063c007190570074086a0a67008301010074056a0a640283010100740b6a0c7c017c0464068d0201006400530029074e7a204f6e6c7920746865206f776e65722063616e206472617720612077696e6e657272010000007a195468657265206973206e6f7468696e6720746f206472617721e9010000007a1b556e61626c6520746f206472617720612076616c69642075736572290272170000007218000000290d7211000000721c00000072120000007213000000721b0000007210000000da0672616e646f6dda0772616e64696e74720e000000721f000000720f0000007220000000da087472616e736665722907da056572726f72da0d746f74616c5f7469636b657473da0c6c75636b795f6e756d6265727223000000da0677696e6e65727217000000da0475736572721400000072140000007215000000da0b647261775f77696e6e65721e00000073260000000002040116010801100110010801040104010a010c0108010401060110010a010c010a010a01722e0000002901da096e65775f6f776e6572630100000000000000010000000200000043000000732400000074006a0174026a0383006b027316740464018301820174026a057c00830101006400530029024e7a244f6e6c7920746865206f776e65722063616e206368616e6765206f776e657273686970212906721200000072130000007211000000721c000000721b000000720f0000002901722f000000721400000072140000007215000000da106368616e67655f6f776e657273686970350000007304000000000216017230000000630100000000000000020000000400000043000000734200000064017d017c0064026b04731474007c018301820164037d0174016a0274036a0483006b02732e74007c018301820174056a067c0074016a0264048d0201006400530029054e7a1e4e6567617469766520616d6f756e74206973206e6f7420616c6c6f77656472010000007a1c4f6e6c79206f776e65722063616e207061796f757420746f6b656e732902721700000072180000002907721b000000721200000072130000007211000000721c00000072200000007228000000290272170000007229000000721400000072140000007215000000da077061795f6f75743b000000730a0000000002040110010401160172310000002917da0863757272656e6379da0374617572020000007220000000da0b466f726569676e48617368721a000000da085661726961626c657211000000720e0000007210000000da0448617368721f0000007226000000da04736565647216000000da085f5f6578706f7274da03696e747224000000722e000000da037374727230000000da05666c6f617472310000007214000000721400000072140000007215000000da083c6d6f64756c653e0100000073220000000801080104010c010c010c010c0106010801080308060601100a1017060110050601