Contract con_otc001


Contract Code


  
1 random.seed()
2 I = importlib
3 __fee = Variable(contract='con_otc001', name='fee')
4 __data = Hash(contract='con_otc001', name='data')
5 __owner = Variable(contract='con_otc001', name='owner')
6 __payout = Hash(default_value=0, contract='con_otc001', name='payout')
7
8
9 def ____():
10 __owner.set(ctx.caller)
11 __fee.set(decimal('2.0'))
12
13
14 @__export('con_otc001')
15 def make_offer(offer_token: str, offer_amount: float, take_token: str,
16 take_amount: float):
17 assert offer_amount > 0, 'Negative offer_amount not allowed'
18 assert take_amount > 0, 'Negative take_amount not allowed'
19 offer_id = hashlib.sha256(str(now) + str(random.randrange(99)))
20 assert not __data[offer_id], 'Generated ID not unique. Try again'
21 maker_fee = offer_amount / 100 * __fee.get()
22 I.import_module(offer_token).transfer_from(amount=offer_amount +
23 maker_fee, to=ctx.this, main_account=ctx.caller)
24 __data[offer_id] = {'maker': ctx.caller, 'taker': None, 'offer_token':
25 offer_token, 'offer_amount': offer_amount, 'take_token': take_token,
26 'take_amount': take_amount, 'fee': __fee.get(), 'state': 'OPEN'}
27 return offer_id
28
29
30 @__export('con_otc001')
31 def take_offer(offer_id: str):
32 assert __data[offer_id], 'Offer ID does not exist'
33 offer = __data[offer_id]
34 assert offer['state'] == 'OPEN', 'Offer not available'
35 maker_fee = offer['offer_amount'] / 100 * offer['fee']
36 taker_fee = offer['take_amount'] / 100 * offer['fee']
37 I.import_module(offer['take_token']).transfer_from(amount=offer[
38 'take_amount'] + taker_fee, to=ctx.this, main_account=ctx.caller)
39 I.import_module(offer['take_token']).transfer(amount=offer[
40 'take_amount'], to=offer['maker'])
41 I.import_module(offer['offer_token']).transfer(amount=offer[
42 'offer_amount'], to=ctx.caller)
43 __payout[offer['offer_token']] += maker_fee
44 __payout[offer['take_token']] += taker_fee
45 offer['state'] = 'EXECUTED'
46 offer['taker'] = ctx.caller
47 __data[offer_id] = offer
48
49
50 @__export('con_otc001')
51 def cancel_offer(offer_id: str):
52 assert __data[offer_id], 'Offer ID does not exist'
53 offer = __data[offer_id]
54 assert offer['state'] == 'OPEN', 'Offer can not be canceled'
55 assert offer['maker'] == ctx.caller, 'Only maker can cancel offer'
56 maker_fee = offer['offer_amount'] / 100 * offer['fee']
57 I.import_module(offer['offer_token']).transfer(amount=offer[
58 'offer_amount'] + maker_fee, to=ctx.caller)
59 offer['state'] = 'CANCELED'
60 __data[offer_id] = offer
61
62
63 @__export('con_otc001')
64 def adjust_fee(trading_fee: float):
65 assert ctx.caller == __owner.get(), 'Only owner can adjust fee'
66 assert trading_fee >= 0 and trading_fee <= 10, 'Wrong fee value'
67 __fee.set(trading_fee)
68
69
70 @__export('con_otc001')
71 def payout(token: str):
72 assert ctx.caller == __owner.get(), 'Payout only available for owner'
73 I.import_module(token).transfer(amount=__payout[token], to=ctx.caller)
74 __payout[token] = 0
75

Byte Code

e3000000000000000000000000060000004000000073be00000065006a018300010065025a0365046400640164028d025a0565066400640364028d025a0765046400640464028d025a08650664056400640664078d035a096408640984005a0a650b64008301650c650d650c650d640a9c04640b640c840483015a0e650b64008301650c640d9c01640e640f840483015a0f650b64008301650c640d9c0164106411840483015a10650b64008301650d64129c0164136414840483015a11650b64008301650c64159c0164166406840483015a12641753002918da0a636f6e5f6f7463303031da036665652902da08636f6e7472616374da046e616d65da0464617461da056f776e6572e900000000da067061796f75742903da0d64656661756c745f76616c756572030000007204000000630000000000000000000000000300000043000000731e00000074006a0174026a038301010074046a01740564018301830101006400530029024e7a03322e302906da075f5f6f776e6572da03736574da03637478da0663616c6c6572da055f5f666565da07646563696d616ca90072100000007210000000da00da045f5f5f5f09000000730400000000010c0172120000002904da0b6f666665725f746f6b656eda0c6f666665725f616d6f756e74da0a74616b655f746f6b656eda0b74616b655f616d6f756e7463040000000000000006000000090000004300000073a00000007c0164016b04731074006402830182017c0364016b047320740064038301820174016a02740374048301740374056a06640483018301170083017d0474077c0419000c00734e74006405830182017c0164061b0074086a09830014007d05740a6a0b7c0083016a0c7c017c051700740d6a0e740d6a0f64078d030100740d6a0f64007c007c017c027c0374086a098300640864099c0874077c043c007c045300290a4e72070000007a214e65676174697665206f666665725f616d6f756e74206e6f7420616c6c6f7765647a204e656761746976652074616b655f616d6f756e74206e6f7420616c6c6f776564e9630000007a2247656e657261746564204944206e6f7420756e697175652e2054727920616761696ee9640000002903da06616d6f756e74da02746fda0c6d61696e5f6163636f756e74da044f50454e2908da056d616b6572da0574616b657272130000007214000000721500000072160000007202000000da0573746174652910da0e417373657274696f6e4572726f72da07686173686c6962da06736861323536da03737472da036e6f77da0672616e646f6dda0972616e6472616e6765da065f5f64617461720e000000da03676574da0149da0d696d706f72745f6d6f64756c65da0d7472616e736665725f66726f6d720c000000da0474686973720d00000029067213000000721400000072150000007216000000da086f666665725f6964da096d616b65725f666565721000000072100000007211000000da0a6d616b655f6f666665720e00000073160000000003100110011c01120110010c011201060106011401722f0000002901722d00000063010000000000000004000000050000004300000073fe00000074007c0019007310740164018301820174007c0019007d017c016402190064036b02732c74016404830182017c016405190064061b007c016407190014007d027c016408190064061b007c016407190014007d0374026a037c016409190083016a047c01640819007c03170074056a0674056a07640a8d03010074026a037c016409190083016a087c01640819007c01640b1900640c8d02010074026a037c01640d190083016a087c016405190074056a07640c8d02010074097c01640d1900050019007c02370003003c0074097c0164091900050019007c03370003003c00640e7c0164023c0074056a077c01640f3c007c0174007c003c006400530029104e7a174f6666657220494420646f6573206e6f74206578697374721f000000721c0000007a134f66666572206e6f7420617661696c61626c657214000000721800000072020000007216000000721500000029037219000000721a000000721b000000721d00000029027219000000721a0000007213000000da084558454355544544721e000000290a722700000072200000007229000000722a000000722b000000720c000000722c000000720d000000da087472616e73666572da085f5f7061796f75742904722d000000da056f66666572722e000000da0974616b65725f666565721000000072100000007211000000da0a74616b655f6f666665721e0000007320000000000210010801140114011401100116011001100110010e011401140108010a017235000000630100000000000000030000000400000043000000738c00000074007c0019007310740164018301820174007c0019007d017c016402190064036b02732c74016404830182017c016405190074026a036b02734274016406830182017c016407190064081b007c016409190014007d0274046a057c01640a190083016a067c01640719007c02170074026a03640b8d020100640c7c0164023c007c0174007c003c0064005300290d4e7a174f6666657220494420646f6573206e6f74206578697374721f000000721c0000007a194f666665722063616e206e6f742062652063616e63656c6564721d0000007a1b4f6e6c79206d616b65722063616e2063616e63656c206f66666572721400000072180000007202000000721300000029027219000000721a000000da0843414e43454c4544290772270000007220000000720c000000720d0000007229000000722a00000072310000002903722d0000007233000000722e000000721000000072100000007211000000da0c63616e63656c5f6f6666657232000000731200000000021001080114011601140110011201080172370000002901da0b74726164696e675f666565630100000000000000010000000200000043000000733c00000074006a0174026a0383006b02731674046401830182017c0064026b0572267c0064036b01732e740464048301820174056a067c00830101006400530029054e7a194f6e6c79206f776e65722063616e2061646a757374206665657207000000e90a0000007a0f57726f6e67206665652076616c75652907720c000000720d000000720a00000072280000007220000000720e000000720b00000029017238000000721000000072100000007211000000da0a61646a7573745f6665653f0000007306000000000216011801723a0000002901da05746f6b656e630100000000000000010000000400000043000000733c00000074006a0174026a0383006b027316740464018301820174056a067c0083016a0774087c00190074006a0164028d020100640374087c003c006400530029044e7a1f5061796f7574206f6e6c7920617661696c61626c6520666f72206f776e657229027219000000721a00000072070000002909720c000000720d000000720a000000722800000072200000007229000000722a000000723100000072320000002901723b0000007210000000721000000072110000007208000000460000007306000000000216011a014e29137225000000da0473656564da09696d706f72746c69627229000000da085661726961626c65720e000000da04486173687227000000720a00000072320000007212000000da085f5f6578706f72747223000000da05666c6f6174722f00000072350000007237000000723a00000072080000007210000000721000000072100000007211000000da083c6d6f64756c653e010000007322000000080104010c010c010c010e03080506010601100e060110130601100c060110060601