Contract con_uw_master_2


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

Byte Code

e3000000000000000000000000080000004000000073fc010000640064016c005a00640064016c015a0165025a03650464026403640464058d035a05650464006403640664058d035a06650464006403640764058d035a0765086408640664036409640a8d045a09640b640c84005a0a650b64038301640d640e840083015a0c650b64038301640f6410840083015a0d650b64038301650e650f650e64119c0364126413840483015a10650b64038301650e6511650e64149c0364156416840483015a12650b64038301650e651364179c0264186419840483015a14650b64038301641a641b840083015a15650b64038301650e650e650e6516641c9c04641d641e840483015a17650b64038301650e6516641f9c0264206421840483015a18650b6403830169006601650e650e650e650e651164229c0564236424840583015a19650b64038301650e650e64259c0264266427840483015a1a650b64038301650e6513650e650e64289c046429642a840483015a1b650b64038301650e650e650e642b9c03642c642d840483015a1c650b64038301650e650e650e642e9c03642f6430840483015a1d650b64038301650e650e64319c0264326433840483015a1e650b64038301650e650e650e650e64349c0464356436840483015a1f650e650e650e64379c036438643984045a20650e650e64259c02643a643b84045a21650e650e650e642b9c03643c643d84045a2264015300293ee9000000004eda00da0f636f6e5f75775f6d61737465725f32da01532903da0d64656661756c745f76616c7565da08636f6e7472616374da046e616d65da0862616c616e636573da086d65746164617461da14636f6e5f7577617272696f72735f6c7374303031da0277702904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d6572060000007207000000630000000000000000000000000300000043000000734600000074006a01740264013c006402740264033c006404740264053c006406740264073c006408740264093c007403640a83017402640b3c007403640c83017402640d3c0064005300290e4eda086f70657261746f7246da0a7769746864726177616c69dc050000da12737461727465725f7061636b5f7072696365e902000000da0967616d655f636f7374e90e000000da0474696d657a04302e3135da04666565737a04302e3230da0f666565735f7769746864726177616c2904da03637478da0663616c6c6572da0a5f5f6d65746164617461da07646563696d616ca900721b000000721b0000007202000000da045f5f5f5f0b000000730e00000000010a0108010801080108010c01721c000000630000000000000000030000000400000043000000734000000074006a017d007402640119007d017402640219007d0274037c0019007c016b04732a740464038301820174056a067c017402640219007c00830301006400530029044e7212000000720e0000007a194e6f7420656e6f75676820636f696e7320746f2073656e64212907721700000072180000007219000000da045f5f7770da0e417373657274696f6e4572726f72720a000000da0d7472616e736665725f66726f6d2903da0673656e646572da06616d6f756e74720e000000721b000000721b0000007202000000da04706c617915000000730a000000000206010801080114017222000000630000000000000000030000000400000043000000734000000074006a017d007402640119007d017402640219007d0274037c0019007c016b04732a740464038301820174056a067c017402640219007c00830301006400530029044e7210000000720e0000007a194e6f7420656e6f75676820636f696e7320746f2073656e64212907721700000072180000007219000000721d000000721e000000720a000000721f000000290372200000007221000000720e000000721b000000721b0000007202000000da0d6275795f6368617261637465721e000000730a0000000002060108010801140172230000002903da03756964da0761756374696f6e7206000000630300000000000000060000000300000043000000733600000074006a017402640119006b027316740364028301820174046a057c0283017d0374006a017d047c036a067c007c0183027d057c05530029034e720e0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721700000072180000007219000000721e000000da0149da0d696d706f72745f6d6f64756c65da0e6368616e67655f61756374696f6e2906722400000072250000007206000000da0a7468696e675f696e666f7220000000da097468696e675f756964721b000000721b0000007202000000722800000027000000730c0000000002100106010a0106010c01722800000029037224000000da046d6574617206000000630300000000000000050000000300000043000000733000000074006a017402640119006b027316740364028301820174046a057c0283017d037c036a067c007c0183027d047c04530029034e720e0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721700000072180000007219000000721e00000072260000007227000000da0b6368616e67655f6d65746129057224000000722b00000072060000007229000000722a000000721b000000721b0000007202000000da116368616e67655f7468696e675f6d65746131000000730a0000000002100106010a010c01722d000000290272240000007221000000630200000000000000020000000500000043000000739600000074006a017402640119006b027316740364028301820174026403190064046b02726c74047c0064056602050019007c01370003003c0074047c0064066602050019007c01370003003c0074047c00640564076603190064006b087292740574047c006405640766033c006e2674047c0064066602050019007c01370003003c0074066a077c017c00740264011900830301006400530029084e720e0000007a0d4f6e6c79206f70657261746f72720f00000054da0772657761726473da0d746f74616c5f7265776172647372140000002908721700000072180000007219000000721e000000da0a5f5f62616c616e636573da036e6f77720a000000721f000000290272240000007221000000721b000000721b0000007202000000722e0000003a0000007310000000000216010c0114011401120110021401722e00000063000000000000000002000000050000004300000073bc00000074006a017d0074027c0064016602190064026b04731e740364038301820174046404190064056b0272b8740574027c00640164066603190018006a067404640619006b04728074027c006401660219007d0174076a087c017c0074046407190083030100640274027c00640166023c007405740274096401640666033c006e3874076a087c017c01740464081900140018007c0074046407190083030100640274027c00640166023c007405740274096401640666033c006400530029094e722e00000072010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e63657321720f000000547214000000720e0000007216000000290a721700000072180000007230000000721e00000072190000007231000000da0464617973720a000000721f0000007224000000290272200000007221000000721b000000721b0000007202000000720f00000047000000731c0000000002060118010c01140108010c010a0108010c0110020a0114010c01720f00000029047224000000722b0000007206000000da0576616c7565630400000000000000060000000400000043000000733200000074006a017402640119006b027316740364028301820174046a057c0283017d047c046a067c007c017c0383037d057c05530029034e720e0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721700000072180000007219000000721e00000072260000007227000000da086164645f6d65746129067224000000722b000000720600000072330000007229000000722a000000721b000000721b000000720200000072340000005a000000730a0000000002100106010a010e0172340000002902da036b65797233000000630200000000000000020000000300000043000000732200000074006a017402640119006b02731674036402830182017c0174027c003c006400530029034e720e0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212904721700000072180000007219000000721e000000290272350000007233000000721b000000721b0000007202000000da0f6368616e67655f6d65746164617461630000007306000000000210010601723600000029057206000000da0c7468696e675f737472696e677207000000da056f776e6572722b000000630500000000000000080000000500000043000000733a00000074006a017402640119006b027316740364028301820174046a057c0083017d0574006a017d067c056a067c017c027c047c0383047d077c07530029034e720e0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721700000072180000007219000000721e00000072260000007227000000da096164645f7468696e6729087206000000723700000072070000007238000000722b00000072290000007220000000722a000000721b000000721b0000007202000000da0c6372656174655f7468696e676a000000730c0000000003100106010a0106011001723a00000029027224000000720600000063020000000000000008000000040000004300000073a600000074006a017c0183017d0274026a037d037c026a047c0083017d047c026a057c0083017d0574067c007c037c01830301007c026a077c0083017d067c06734a74087c0064011700830182017c0664026b04735e74087c0064011700830182017c067c06740964031900140018007d07740a6a0b7c077c047c0383030100740a6a0b7c0674096403190014007409640419007c0383030100740c7c007c037c01830301006400530029054e7a10206973206e6f7420666f722073616c6572010000007215000000720e000000290d7226000000722700000072170000007218000000da096765745f6f776e6572da0b6765745f63726561746f72da165f5f6173736572745f616c72656164795f6f776e6564da106765745f70726963655f616d6f756e74721e0000007219000000720a000000721f000000da145f5f7472616e736665725f6f776e657273686970290872240000007206000000722900000072200000007238000000da0763726561746f72da0c70726963655f616d6f756e74da1070726963655f616d6f756e745f706179721b000000721b0000007202000000da096275795f7468696e6775000000731a00000000020a0106010a010a010c010a011001140110010e010e010c017243000000290472240000007221000000da0b6465736372697074696f6e7206000000630400000000000000060000000400000043000000734200000074006a017c0383017d047c046a027c0083017d057c0564016b027324740364028301820174047c0074056a067c03830301007c046a077c007c01830201006400530029034e467a0e206973206f6e2061756374696f6e290872260000007227000000da0b6765745f61756374696f6e721e000000da125f5f6173736572745f6f776e65727368697072170000007218000000da097365745f70726963652906722400000072210000007244000000720600000072290000007225000000721b000000721b0000007202000000da0a73656c6c5f7468696e6786000000730a00000000020a010a0110010e01724800000029037224000000da096e65775f6f776e65727206000000630300000000000000040000000400000043000000732e00000074006a017d0374027c007c037c028303010074037c007c017c028303010074047c007c017c02830301006400530029014e2905721700000072180000007246000000723d000000723f00000029047224000000724900000072060000007220000000721b000000721b0000007202000000da087472616e736665728f0000007308000000000206010c010c01724a00000029037224000000da02746f7206000000630300000000000000040000000500000043000000732400000074006a017d0374027c007c037c0283030100640174037c037c007c0166033c006400530029024e542904721700000072180000007246000000723000000029047224000000724b00000072060000007220000000721b000000721b0000007202000000da07617070726f7665970000007306000000000206010c01724c00000029027224000000724b00000063020000000000000002000000050000004300000073140000006400740074016a027c007c0166033c006400530029014e290372300000007217000000721800000029027224000000724b000000721b000000721b0000007202000000da067265766f6b659e00000073020000000002724d00000029047224000000724b000000da0c6d61696e5f6163636f756e747206000000630400000000000000050000000500000043000000735200000074006a017d0474027c027c007c0466031900731c740364018301820174047c007c027c038303010074057c007c017c038303010074067c007c017c0383030100640074027c027c007c0466033c006400530029024e7a3e596f752068617665206e6f74206265656e20676976656e20617070726f76616c20746f207472616e73666572207468697320757365722773206974656d2e2907721700000072180000007230000000721e0000007246000000723d000000723f00000029057224000000724b000000724e00000072060000007220000000721b000000721b0000007202000000721f000000a3000000730e00000000020601100106010c010c010c01721f0000002903722400000072200000007206000000630300000000000000050000000300000043000000733000000074006a017c0283017d037c036a027c0083017d047c047c016b03732c74037c00640117007c011700830182016400530029024e7a1220616c7265616479206f776e656420627920290472260000007227000000723b000000721e000000290572240000007220000000720600000072290000007238000000721b000000721b0000007202000000723d000000ae000000730600000000010a010a01723d000000630300000000000000050000000300000043000000733000000074006a017c0283017d037c036a027c0083017d047c047c016b02732c74037c00640117007c011700830182016400530029024e7a0e206e6f74206f776e656420627920290472260000007227000000723b000000721e000000290572240000007220000000720600000072290000007238000000721b000000721b00000072020000007246000000b4000000730600000000010a010a017246000000630300000000000000050000000300000043000000733e00000074006a017c0283017d037c036a027c0083017d047c036a037c007c01830201007c036a047c00830164016b04723a7c036a057c006401830201006400530029024e7201000000290672260000007227000000723b000000da097365745f6f776e6572723e000000724700000029057224000000724900000072060000007229000000da096f6c645f6f776e6572721b000000721b0000007202000000723f000000ba000000730a00000000010a010a010c010e01723f0000002923da0863757272656e6379720a000000da09696d706f72746c69627226000000da0448617368da035f5f5372300000007219000000da0b466f726569676e48617368721d000000721c000000da085f5f6578706f727472220000007223000000da03737472da04626f6f6c7228000000da0464696374722d000000da05666c6f6174722e000000720f000000da03416e7972340000007236000000723a00000072430000007248000000724a000000724c000000724d000000721f000000723d0000007246000000723f000000721b000000721b000000721b0000007202000000da083c6d6f64756c653e01000000734c0000000801080104010e010e010e0104010c03080a1009100906011409060114080601120c1013060116080601120606021c0906011210060116080601140706011406060112040601160a12061006