Contract con_uw_master


Contract Code


  
1 import currency
2 import con_uwarriors_lst001
3 I = importlib
4
5 S = Hash(default_value='')
6 balances = Hash(default_value=0)
7 metadata = Hash(default_value=0)
8 wp = ForeignHash(foreign_contract='con_uwarriors_lst001', foreign_name='balances')
9
10 @construct
11 def seed():
12 metadata['operator'] = ctx.caller
13 metadata['withdrawal'] = False
14 metadata['starter_pack_price'] = 1500
15 metadata['game_cost'] = 2
16 metadata['time'] = 14
17 metadata['fees'] = decimal('0.15')
18
19 @export
20 def play():
21 sender = ctx.caller
22 amount = metadata['game_cost']
23 operator = metadata['operator']
24 assert wp[sender] > amount , 'Not enough coins to send!'
25 con_uwarriors_lst001.transfer_from(amount, metadata['operator'], sender)
26
27 @export
28 def buy_character():
29 sender = ctx.caller
30 amount = metadata['starter_pack_price']
31 operator = metadata['operator']
32 assert wp[sender] > amount , 'Not enough coins to send!'
33 con_uwarriors_lst001.transfer_from(amount, metadata['operator'], sender)
34
35 @export
36 def change_auction(uid: str, auction: bool, contract: str):
37 assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
38 thing_info = I.import_module(contract)
39 sender = ctx.caller
40 thing_uid = thing_info.change_auction(uid, auction)
41 return thing_uid
42
43
44 @export
45 def change_thing_meta(uid: str, meta: dict, contract: str):
46 assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
47 thing_info = I.import_module(contract)
48 thing_uid = thing_info.change_meta(uid, meta)
49 return thing_uid
50
51 @export
52 def rewards(uid: str, amount: float):
53 assert ctx.caller == metadata['operator'], 'Only operator'
54
55 if metadata['withdrawal'] == True:
56 balances[uid, 'rewards'] += amount
57 balances[uid, 'total_rewards'] += amount
58 if balances[uid, 'rewards', 'time'] is None:
59 balances[uid, 'rewards', 'time'] = now
60 else:
61 balances[uid, 'total_rewards'] += amount
62 con_uwarriors_lst001.transfer_from(amount, uid, metadata['operator'])
63
64 @export
65 def withdrawal():
66 sender = ctx.caller
67 assert balances[sender, 'rewards'] > 0, 'Cannot send negative balances!'
68
69 if metadata['withdrawal'] == True:
70 if (now - balances[sender, 'rewards', 'time']).days > metadata['time']:
71 amount = balances[sender, 'rewards']
72 con_uwarriors_lst001.transfer_from(amount, sender, metadata['operator'])
73 balances[sender, 'rewards'] = 0
74 balances[uid, 'rewards', 'time'] = now
75
76 @export
77 def add_meta(uid: str, meta:str, contract: str, value: Any):
78 assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
79 thing_info = I.import_module(contract)
80 thing_uid = thing_info.add_meta(uid, meta, value)
81 return thing_uid
82
83
84 @export
85 def change_metadata(key: str, value: Any):
86 assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
87 metadata[key] = value
88
89
90
91 @export
92 def create_thing(contract: str, thing_string: str, name: str, owner: str, meta: dict = {}):
93 assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
94 thing_info = I.import_module(contract)
95 sender = ctx.caller
96 thing_uid = thing_info.add_thing(thing_string, name, meta, owner)
97 return thing_uid
98
99
100 @export
101 def buy_thing(uid: str, contract:str):
102 thing_info = I.import_module(contract)
103 sender = ctx.caller
104
105 owner = thing_info.get_owner(uid)
106 creator = thing_info.get_creator(uid)
107
108 assert_already_owned(uid, sender, contract)
109
110 price_amount = thing_info.get_price_amount(uid)
111
112 assert price_amount, uid + ' is not for sale'
113 assert price_amount > 0, uid + ' is not for sale'
114
115 con_uwarriors_lst001.transfer_from(price_amount - (price_amount * metadata['fees']), owner, sender)
116 con_uwarriors_lst001.transfer_from((price_amount * metadata['fees']), owner, sender)
117
118 transfer_ownership(uid, sender, contract)
119
120
121 @export
122 def sell_thing(uid: str, amount: float, description: str, contract:str):
123 thing_info = I.import_module(contract)
124 auction = thing_info.get_auction(uid)
125 assert auction == False, ' is on auction'
126 assert_ownership(uid, ctx.caller, contract)
127 thing_info.set_price(uid, amount)
128
129
130 @export
131 def transfer(uid: str, new_owner: str, contract:str):
132 sender = ctx.caller
133 assert_ownership(uid, sender, contract)
134 assert_already_owned(uid, new_owner, contract)
135 transfer_ownership(uid, new_owner, contract)
136
137 @export
138 def approve(uid: str, to: str, contract:str):
139 sender = ctx.caller
140 assert_ownership(uid, sender, contract)
141 balances[sender, uid, to] = True
142
143 @export
144 def revoke(uid: str, to: str):
145 balances[ctx.caller, uid, to] = None
146
147 @export
148 def transfer_from(uid: str, to: str, main_account: str, contract: str):
149 sender = ctx.caller
150
151 assert balances[main_account, uid, sender], "You have not been given approval to transfer this user's item."
152 assert_ownership(uid, main_account, contract)
153
154 # transfer
155 assert_already_owned(uid, to, contract)
156 transfer_ownership(uid, to, contract)
157
158 # revoke the approval
159 balances[main_account, uid, sender] = None
160
161
162 def assert_already_owned(uid: str, sender: str, contract: str):
163 thing_info = I.import_module(contract)
164 owner = thing_info.get_owner(uid)
165 assert owner != sender, uid + ' already owned by ' + sender
166
167 def assert_ownership(uid: str, sender, contract: str):
168 thing_info = I.import_module(contract)
169 owner = thing_info.get_owner(uid)
170 assert owner == sender, uid + ' not owned by ' + sender
171
172
173 def transfer_ownership(uid:str, new_owner: str, contract: str):
174 thing_info = I.import_module(contract)
175 old_owner = thing_info.get_owner(uid)
176
177 thing_info.set_owner(uid, new_owner)
178 if thing_info.get_price_amount(uid) > 0:
179 thing_info.set_price(uid, 0)
180
181

Byte Code

e3000000000000000000000000080000004000000073fc010000640064016c005a00640064016c015a0165025a03650464026403640464058d035a05650464006403640664058d035a06650464006403640764058d035a0765086408640664036409640a8d045a09640b640c84005a0a650b64038301640d640e840083015a0c650b64038301640f6410840083015a0d650b64038301650e650f650e64119c0364126413840483015a10650b64038301650e6511650e64149c0364156416840483015a12650b64038301650e651364179c0264186419840483015a14650b64038301641a641b840083015a15650b64038301650e650e650e6516641c9c04641d641e840483015a17650b64038301650e6516641f9c0264206421840483015a18650b6403830169006601650e650e650e650e651164229c0564236424840583015a19650b64038301650e650e64259c0264266427840483015a1a650b64038301650e6513650e650e64289c046429642a840483015a1b650b64038301650e650e650e642b9c03642c642d840483015a1c650b64038301650e650e650e642e9c03642f6430840483015a1d650b64038301650e650e64319c0264326433840483015a1e650b64038301650e650e650e650e64349c0464356436840483015a1f650e650e650e64379c036438643984045a20650e650e64259c02643a643b84045a21650e650e650e642b9c03643c643d84045a2264015300293ee9000000004eda00da0d636f6e5f75775f6d6173746572da01532903da0d64656661756c745f76616c7565da08636f6e7472616374da046e616d65da0862616c616e636573da086d65746164617461da14636f6e5f7577617272696f72735f6c7374303031da0277702904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d6572060000007207000000630000000000000000000000000300000043000000733a00000074006a01740264013c006402740264033c006404740264053c006406740264073c006408740264093c007403640a83017402640b3c0064005300290c4eda086f70657261746f7246da0a7769746864726177616c69dc050000da12737461727465725f7061636b5f7072696365e902000000da0967616d655f636f7374e90e000000da0474696d657a04302e3135da04666565732904da03637478da0663616c6c6572da0a5f5f6d65746164617461da07646563696d616ca900721a000000721a0000007202000000da045f5f5f5f0b000000730c00000000010a010801080108010801721b000000630000000000000000030000000400000043000000734000000074006a017d007402640119007d017402640219007d0274037c0019007c016b04732a740464038301820174056a067c017402640219007c00830301006400530029044e7212000000720e0000007a194e6f7420656e6f75676820636f696e7320746f2073656e64212907721600000072170000007218000000da045f5f7770da0e417373657274696f6e4572726f72720a000000da0d7472616e736665725f66726f6d2903da0673656e646572da06616d6f756e74720e000000721a000000721a0000007202000000da04706c617914000000730a000000000206010801080114017221000000630000000000000000030000000400000043000000734000000074006a017d007402640119007d017402640219007d0274037c0019007c016b04732a740464038301820174056a067c017402640219007c00830301006400530029044e7210000000720e0000007a194e6f7420656e6f75676820636f696e7320746f2073656e64212907721600000072170000007218000000721c000000721d000000720a000000721e0000002903721f0000007220000000720e000000721a000000721a0000007202000000da0d6275795f6368617261637465721d000000730a0000000002060108010801140172220000002903da03756964da0761756374696f6e7206000000630300000000000000060000000300000043000000733600000074006a017402640119006b027316740364028301820174046a057c0283017d0374006a017d047c036a067c007c0183027d057c05530029034e720e0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721600000072170000007218000000721d000000da0149da0d696d706f72745f6d6f64756c65da0e6368616e67655f61756374696f6e2906722300000072240000007206000000da0a7468696e675f696e666f721f000000da097468696e675f756964721a000000721a0000007202000000722700000026000000730c0000000002100106010a0106010c01722700000029037223000000da046d6574617206000000630300000000000000050000000300000043000000733000000074006a017402640119006b027316740364028301820174046a057c0283017d037c036a067c007c0183027d047c04530029034e720e0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721600000072170000007218000000721d00000072250000007226000000da0b6368616e67655f6d65746129057223000000722a000000720600000072280000007229000000721a000000721a0000007202000000da116368616e67655f7468696e675f6d65746130000000730a0000000002100106010a010c01722c000000290272230000007220000000630200000000000000020000000500000043000000739600000074006a017402640119006b027316740364028301820174026403190064046b02726c74047c0064056602050019007c01370003003c0074047c0064066602050019007c01370003003c0074047c00640564076603190064006b087292740574047c006405640766033c006e2674047c0064066602050019007c01370003003c0074066a077c017c00740264011900830301006400530029084e720e0000007a0d4f6e6c79206f70657261746f72720f00000054da0772657761726473da0d746f74616c5f7265776172647372140000002908721600000072170000007218000000721d000000da0a5f5f62616c616e636573da036e6f77720a000000721e000000290272230000007220000000721a000000721a0000007202000000722d000000390000007310000000000216010c0114011401120110021401722d000000630000000000000000020000000500000043000000738200000074006a017d0074027c0064016602190064026b04731e740364038301820174046404190064056b02727e740574027c00640164066603190018006a067404640619006b04727e74027c006401660219007d0174076a087c017c0074046407190083030100640274027c00640166023c007405740274096401640666033c006400530029084e722d00000072010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e63657321720f000000547214000000720e000000290a72160000007217000000722f000000721d00000072180000007230000000da0464617973720a000000721e00000072230000002902721f0000007220000000721a000000721a0000007202000000720f0000004600000073140000000002060118010c01140108010c010a0108010c01720f00000029047223000000722a0000007206000000da0576616c7565630400000000000000060000000400000043000000733200000074006a017402640119006b027316740364028301820174046a057c0283017d047c046a067c007c017c0383037d057c05530029034e720e0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721600000072170000007218000000721d00000072250000007226000000da086164645f6d65746129067223000000722a0000007206000000723200000072280000007229000000721a000000721a0000007202000000723300000054000000730a0000000002100106010a010e0172330000002902da036b65797232000000630200000000000000020000000300000043000000732200000074006a017402640119006b02731674036402830182017c0174027c003c006400530029034e720e0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212904721600000072170000007218000000721d000000290272340000007232000000721a000000721a0000007202000000da0f6368616e67655f6d657461646174615d0000007306000000000210010601723500000029057206000000da0c7468696e675f737472696e677207000000da056f776e6572722a000000630500000000000000080000000500000043000000733a00000074006a017402640119006b027316740364028301820174046a057c0083017d0574006a017d067c056a067c017c027c047c0383047d077c07530029034e720e0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721600000072170000007218000000721d00000072250000007226000000da096164645f7468696e6729087206000000723600000072070000007237000000722a0000007228000000721f0000007229000000721a000000721a0000007202000000da0c6372656174655f7468696e6764000000730c0000000003100106010a01060110017239000000290272230000007206000000630200000000000000070000000500000043000000739e00000074006a017c0183017d0274026a037d037c026a047c0083017d047c026a057c0083017d0574067c007c037c01830301007c026a077c0083017d067c06734a74087c0064011700830182017c0664026b04735e74087c00640117008301820174096a0a7c067c06740b64031900140018007c047c038303010074096a0a7c06740b6403190014007c047c0383030100740c7c007c037c01830301006400530029044e7a10206973206e6f7420666f722073616c6572010000007215000000290d7225000000722600000072160000007217000000da096765745f6f776e6572da0b6765745f63726561746f72da165f5f6173736572745f616c72656164795f6f776e6564da106765745f70726963655f616d6f756e74721d000000720a000000721e0000007218000000da145f5f7472616e736665725f6f776e6572736869702907722300000072060000007228000000721f0000007237000000da0763726561746f72da0c70726963655f616d6f756e74721a000000721a0000007202000000da096275795f7468696e676f000000731a00000000020a0106010a010a010c010a0110011401080112010e0108017241000000290472230000007220000000da0b6465736372697074696f6e7206000000630400000000000000060000000400000043000000734200000074006a017c0383017d047c046a027c0083017d057c0564016b027324740364028301820174047c0074056a067c03830301007c046a077c007c01830201006400530029034e467a0e206973206f6e2061756374696f6e290872250000007226000000da0b6765745f61756374696f6e721d000000da125f5f6173736572745f6f776e65727368697072160000007217000000da097365745f70726963652906722300000072200000007242000000720600000072280000007224000000721a000000721a0000007202000000da0a73656c6c5f7468696e6780000000730a00000000020a010a0110010e01724600000029037223000000da096e65775f6f776e65727206000000630300000000000000040000000400000043000000732e00000074006a017d0374027c007c037c028303010074037c007c017c028303010074047c007c017c02830301006400530029014e2905721600000072170000007244000000723c000000723e0000002904722300000072470000007206000000721f000000721a000000721a0000007202000000da087472616e73666572890000007308000000000206010c010c01724800000029037223000000da02746f7206000000630300000000000000040000000500000043000000732400000074006a017d0374027c007c037c0283030100640174037c037c007c0166033c006400530029024e542904721600000072170000007244000000722f0000002904722300000072490000007206000000721f000000721a000000721a0000007202000000da07617070726f7665910000007306000000000206010c01724a00000029027223000000724900000063020000000000000002000000050000004300000073140000006400740074016a027c007c0166033c006400530029014e2903722f00000072160000007217000000290272230000007249000000721a000000721a0000007202000000da067265766f6b659800000073020000000002724b000000290472230000007249000000da0c6d61696e5f6163636f756e747206000000630400000000000000050000000500000043000000735200000074006a017d0474027c027c007c0466031900731c740364018301820174047c007c027c038303010074057c007c017c038303010074067c007c017c0383030100640074027c027c007c0466033c006400530029024e7a3e596f752068617665206e6f74206265656e20676976656e20617070726f76616c20746f207472616e73666572207468697320757365722773206974656d2e290772160000007217000000722f000000721d0000007244000000723c000000723e000000290572230000007249000000724c0000007206000000721f000000721a000000721a0000007202000000721e0000009d000000730e00000000020601100106010c010c010c01721e00000029037223000000721f0000007206000000630300000000000000050000000300000043000000733000000074006a017c0283017d037c036a027c0083017d047c047c016b03732c74037c00640117007c011700830182016400530029024e7a1220616c7265616479206f776e656420627920290472250000007226000000723a000000721d00000029057223000000721f000000720600000072280000007237000000721a000000721a0000007202000000723c000000a8000000730600000000010a010a01723c000000630300000000000000050000000300000043000000733000000074006a017c0283017d037c036a027c0083017d047c047c016b02732c74037c00640117007c011700830182016400530029024e7a0e206e6f74206f776e656420627920290472250000007226000000723a000000721d00000029057223000000721f000000720600000072280000007237000000721a000000721a00000072020000007244000000ae000000730600000000010a010a017244000000630300000000000000050000000300000043000000733e00000074006a017c0283017d037c036a027c0083017d047c036a037c007c01830201007c036a047c00830164016b04723a7c036a057c006401830201006400530029024e7201000000290672250000007226000000723a000000da097365745f6f776e6572723d000000724500000029057223000000724700000072060000007228000000da096f6c645f6f776e6572721a000000721a0000007202000000723e000000b4000000730a00000000010a010a010c010e01723e0000002923da0863757272656e6379720a000000da09696d706f72746c69627225000000da0448617368da035f5f53722f0000007218000000da0b466f726569676e48617368721c000000721b000000da085f5f6578706f727472210000007222000000da03737472da04626f6f6c7227000000da0464696374722c000000da05666c6f6174722d000000720f000000da03416e79723300000072350000007239000000724100000072460000007248000000724a000000724b000000721e000000723c0000007244000000723e000000721a000000721a000000721a0000007202000000da083c6d6f64756c653e01000000734c0000000801080104010e010e010e0104010c0308091009100906011409060114080601120c100e060116080601120606021c0906011210060116080601140706011406060112040601160a12061006