Contract con_spange_game_3


Contract Code


  
1 random.seed()
2 I = importlib
3 metadata = Hash()
4 varStack = Variable()
5 maxStack = Variable()
6 gameStack = Variable()
7
8
9 @construct
10 def seed():
11 metadata['owner'] = ctx.caller
12 metadata['operator'] = ctx.caller
13 varStack.set(0.1)
14 maxStack.set(0)
15 gameStack.set(0)
16
17
18 @export
19 def rpsPlay(throw: str, stack: float):
20 gameStack = ForeignHash(foreign_contract='con_spange',
21 foreign_name='balances')
22 maxStack = gameStack[ctx.this] * varStack
23
24 assert not ctx.caller.startswith('con_'), 'bad robot'
25 assert throw == "r" or throw == "p" or throw == "s", 'r, p or s; to represent rock, paper or scissors.'
26 assert stack > 0, 'stack must be some spange.'
27 assert stack < maxStack, 'whoa big spender! less than ' + str(maxStack)
28 I.import_module('con_spange').transfer_from(
29 amount=stack,
30 to=ctx.this,
31 main_account=ctx.caller)
32 play = rpsRound(throw, stack)
33 return play
34
35
36 def rpsRound(p1: str, stack: float):
37 b1 = botThrow()
38 if p1 == b1:
39 I.import_module('con_spange').transfer(
40 amount=stack*0.99,
41 to=ctx.caller)
42 result = 'Tie. bot = ' + b1
43 return result
44 elif (b1 == 'r' and p1 == 's') or (b1 == 's' and p1 == 'p') or (b1 == 'p' and p1 == 'r'):
45 result = 'Bot wins! bot = ' + b1
46 return result
47 else:
48 I.import_module('con_spange').transfer(
49 amount=stack*2,
50 to=ctx.caller)
51 result = 'Human wins! bot = ' + b1
52 return result
53
54
55 def botThrow():
56 x = random.randint(0, 2)
57 if x == 0:
58 b1 = 'r'
59 elif x == 1:
60 b1 = 'p'
61 else:
62 b1 = 's'
63 return b1
64
65
66 @export
67 def change_metadata(key: str, value: Any):
68 assert ctx.caller == metadata['operator'], 'No'
69 metadata[key] = value
70
71
72 @export
73 def top_up(amount: float):
74 assert ctx.caller == metadata['operator'], 'No'
75 assert amount > 0, 'No Zero'
76 I.import_module('con_spange').transfer_from(
77 amount=amount,
78 to=ctx.this,
79 main_account=ctx.caller)
80
81
82 @export
83 def tap_out(amount: float):
84 assert ctx.caller == metadata['operator'], 'No'
85 assert amount > 0, 'No Zero'
86 I.import_module('con_spange').transfer(
87 amount=amount,
88 to=ctx.caller)
89
90 @export
91 def set_var(amount: float):
92 assert ctx.caller == metadata['operator'], 'No'
93 varStack.set(amount)

Byte Code

e3000000000000000000000000040000004000000073d200000065006a018300010065025a0365046400640164028d025a0565066400640364028d025a0765066400640464028d025a0865066400640564028d025a096406640784005a0a650b64008301650c650d64089c026409640a840483015a0e650c650d640b9c02640c640d84045a0f640e640f84005a10650b64008301650c651164109c0264116412840483015a12650b64008301650d64139c0164146415840483015a13650b64008301650d64139c0164166417840483015a14650b64008301650d64139c0164186419840483015a15641a5300291bda11636f6e5f7370616e67655f67616d655f33da086d657461646174612902da08636f6e7472616374da046e616d65da08766172537461636bda086d6178537461636bda0967616d65537461636b630000000000000000000000000300000043000000733a00000074006a01740264013c0074006a01740264023c0074036a047405640383018301010074066a0464048301010074076a046404830101006400530029054eda056f776e6572da086f70657261746f727a03302e31e9000000002908da03637478da0663616c6c6572da0a5f5f6d65746164617461da0a5f5f766172537461636bda03736574da07646563696d616cda0a5f5f6d6178537461636bda0b5f5f67616d65537461636ba90072130000007213000000da00da045f5f5f5f09000000730a00000000010a010a010e010a0172150000002902da057468726f77da05737461636b63020000000000000005000000060000004300000073a40000007400640164026403640464058d047d027c0274016a021900740314007d0374016a046a05640683010c00733474066407830182017c0064086b0273547c0064096b0273547c00640a6b0273547406640b830182017c01640c6b0473647406640d830182017c017c036b00737c7406640e74077c03830117008301820174086a09640183016a0a7c0174016a0274016a04640f8d030100740b7c007c0183027d047c04530029104eda0a636f6e5f7370616e6765da0862616c616e636573720100000072070000002904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d6572030000007204000000da04636f6e5f7a0962616420726f626f74da0172da0170da01737a30722c2070206f7220733b20746f20726570726573656e7420726f636b2c207061706572206f722073636973736f72732e720a0000007a1a737461636b206d75737420626520736f6d65207370616e67652e7a1c77686f6120626967207370656e64657221206c657373207468616e202903da06616d6f756e74da02746fda0c6d61696e5f6163636f756e74290cda0b466f726569676e48617368720b000000da0474686973720e000000720c000000da0a73746172747377697468da0e417373657274696f6e4572726f72da03737472da0149da0d696d706f72745f6d6f64756c65da0d7472616e736665725f66726f6dda0a5f5f727073526f756e6429057216000000721700000072120000007211000000da04706c6179721300000072130000007214000000da07727073506c6179110000007316000000000204010c010e01160120011001180110010a010a01722d0000002902da0270317217000000630200000000000000040000000400000043000000739e000000740083007d027c007c026b02723874016a02640183016a037c01740464028301140074056a0664038d02010064047c0217007d037c0353007c0264056b0272487c0064066b0273687c0264066b0272587c0064076b0273687c0264076b0272747c0064056b02727464087c0217007d037c03530074016a02640183016a037c016409140074056a0664038d020100640a7c0217007d037c03530064005300290b4e72180000007a04302e39392902722000000072210000007a0b5469652e20626f74203d20721d000000721f000000721e0000007a10426f742077696e732120626f74203d20e9020000007a1248756d616e2077696e732120626f74203d202907da0a5f5f626f745468726f7772280000007229000000da087472616e736665727210000000720b000000720c0000002904722e0000007217000000da026231da06726573756c74721300000072130000007214000000722b0000002000000073180000000001060108010e011001080104013001080104021a010801722b000000630000000000000000020000000300000043000000733000000074006a016401640283027d007c0064016b02721a64037d016e127c0064046b02722864057d016e0464067d017c01530029074e720a000000722f000000721d000000e901000000721e000000721f0000002902da0672616e646f6dda0772616e64696e742902da01787232000000721300000072130000007214000000723000000030000000730e00000000010c010801060108010602040172300000002902da036b6579da0576616c7565630200000000000000020000000300000043000000732200000074006a017402640119006b02731674036402830182017c0174027c003c006400530029034e7209000000da024e6f2904720b000000720c000000720d0000007226000000290272380000007239000000721300000072130000007214000000da0f6368616e67655f6d657461646174613b000000730400000000021601723b00000029017220000000630100000000000000010000000500000043000000734400000074006a017402640119006b02731674036402830182017c0064036b047326740364048301820174046a05640583016a067c0074006a0774006a0164068d0301006400530029074e7209000000723a000000720a0000007a074e6f205a65726f721800000029037220000000722100000072220000002908720b000000720c000000720d000000722600000072280000007229000000722a000000722400000029017220000000721300000072130000007214000000da06746f705f75704100000073080000000002160110011001723c000000630100000000000000010000000400000043000000734000000074006a017402640119006b02731674036402830182017c0064036b047326740364048301820174046a05640583016a067c0074006a0164068d0201006400530029074e7209000000723a000000720a0000007a074e6f205a65726f72180000002902722000000072210000002907720b000000720c000000720d000000722600000072280000007229000000723100000029017220000000721300000072130000007214000000da077461705f6f7574490000007306000000000216011001723d000000630100000000000000010000000300000043000000732400000074006a017402640119006b027316740364028301820174046a057c00830101006400530029034e7209000000723a0000002906720b000000720c000000720d0000007226000000720e000000720f00000029017220000000721300000072130000007214000000da077365745f76617250000000730400000000021601723e0000004e29167235000000da0473656564da09696d706f72746c69627228000000da0448617368720d000000da085661726961626c65720e000000721100000072120000007215000000da085f5f6578706f72747227000000da05666c6f6174722d000000722b0000007230000000da03416e79723b000000723c000000723d000000723e0000007213000000721300000072130000007214000000da083c6d6f64756c653e010000007324000000080104010c010c010c010c0308080601120e1010080b0601120506011007060110060601