Skip to content

Commit 1f8eb67

Browse files
committed
Added Withdraw Support
- added functionality to withdraw from LP
1 parent 39a7ace commit 1f8eb67

3 files changed

Lines changed: 137 additions & 16 deletions

File tree

controller.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ def __init__(self, window):
1717
pub.subscribe(self.quit_program_requested, 'quit_program_requested')
1818
pub.subscribe(self.asset_of_interest_change, 'asset_of_interest_change')
1919
pub.subscribe(self.deposit_lp, 'deposit_lp')
20+
pub.subscribe(self.withdraw_lp, 'withdraw_lp')
2021
pub.subscribe(self.update_gui, 'update_gui')
2122
pub.subscribe(self.update_trading_prices, 'update_trading_prices')
2223
pub.subscribe(self.print_transaction, 'print_transaction')
2324
pub.subscribe(self.print_deposit, 'print_deposit')
25+
pub.subscribe(self.print_withdraw, 'print_withdraw')
2426
pub.subscribe(self.invalid_pool, 'invalid_pool')
2527

2628
def invalid_pool(self):
@@ -29,6 +31,12 @@ def invalid_pool(self):
2931
def print_deposit(self, data):
3032
self.view.print_deposit(data)
3133

34+
def print_withdraw(self, data):
35+
self.view.print_withdraw(data)
36+
37+
def withdraw_lp(self, data):
38+
self.model.withdraw_lp(data)
39+
3240
def deposit_lp(self, data):
3341
self.model.deposit_lp(data)
3442

model.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,33 @@ def deposit_lp(self, data):
151151
else:
152152
print('deposit operation failed')
153153

154+
def withdraw_lp(self, data):
155+
trade_message = ''
156+
new_data = {}
157+
try:
158+
bitshares = BitShares(nobroadcast=False, keys=data['key'], blocking='head')
159+
trade_message = bitshares.withdraw_from_liquidity_pool(
160+
pool=data['asset'],
161+
share_amount=Amount(
162+
data['withdraw_amount'],
163+
data['asset'],
164+
),
165+
account=data['account'],
166+
)
167+
new_data['operation_results'] = trade_message['operation_results']
168+
except Exception as err:
169+
print(err)
170+
if new_data:
171+
try:
172+
new_data['paid'] = Amount(new_data['operation_results'][0][1]['paid'][0])
173+
new_data['received_x'] = Amount(new_data['operation_results'][0][1]['received'][0])
174+
new_data['received_y'] = Amount(new_data['operation_results'][0][1]['received'][1])
175+
pub.sendMessage('print_withdraw', data=new_data)
176+
except:
177+
print('error parsing withdraw operation results')
178+
else:
179+
print('withdraw operation failed')
180+
154181
def take_offer(self, data):
155182
bitshares = BitShares(nobroadcast=False, keys=data['key'], blocking='head')
156183
trade_message = ''

view.py

Lines changed: 102 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,15 @@ def create_widgets(self):
4343
self.frame_deposit_upper = tk.Frame(
4444
self.frame_deposit,
4545
)
46-
self.frame_deposit_lower = tk.Frame(
47-
self.frame_deposit
46+
# self.frame_deposit_lower = tk.Frame(
47+
# self.frame_deposit
48+
# )
49+
self.frame_withdraw = tk.Frame(
50+
self.window,
51+
background='#c9c9c9',
52+
)
53+
self.frame_withdraw_inner = tk.Frame(
54+
self.frame_withdraw,
4855
)
4956

5057
# pool info widgets
@@ -170,25 +177,42 @@ def create_widgets(self):
170177
self.frame_deposit_upper,
171178
textvariable=self.string_var['lbl_assety_deposit']
172179
)
173-
self.btn_check_deposit = ttk.Button(
174-
self.frame_deposit_upper,
175-
text='Estimate Coming Soon',
176-
command=self.update_shares,
177-
state='disabled',
178-
)
180+
# self.btn_check_deposit = ttk.Button(
181+
# self.frame_deposit_upper,
182+
# text='Estimate Coming Soon',
183+
# command=self.update_shares,
184+
# state='disabled',
185+
# )
179186
self.btn_deposit = ttk.Button(
180187
self.frame_deposit_upper,
181188
text='Deposit to LP',
182189
command=self.deposit_to_lp,
183190
state='disabled',
184191
)
185-
self.lbl_poolshare_deposit = tk.Label(
186-
self.frame_deposit_lower,
187-
textvariable=self.string_var['lbl_poolshare_deposit'],
192+
# self.lbl_poolshare_deposit = tk.Label(
193+
# self.frame_deposit_lower,
194+
# textvariable=self.string_var['lbl_poolshare_deposit'],
195+
# )
196+
# self.lbl_poolshare_symbol = tk.Label(
197+
# self.frame_deposit_lower,
198+
# textvariable=self.string_var['lbl_poolshare_symbol']
199+
# )
200+
# withdraw widgets
201+
self.ent_poolasset_amount = tk.Entry(
202+
self.frame_withdraw_inner,
203+
width=10,
204+
state='disabled',
205+
justify='right',
188206
)
189-
self.lbl_poolshare_symbol = tk.Label(
190-
self.frame_deposit_lower,
191-
textvariable=self.string_var['lbl_poolshare_symbol']
207+
self.lbl_poolasset_name = tk.Label(
208+
self.frame_withdraw_inner,
209+
textvariable=self.string_var['sv_lbl_poolasset_name']
210+
)
211+
self.btn_withdraw = ttk.Button(
212+
self.frame_withdraw_inner,
213+
text='Withdraw from LP',
214+
command=self.withdraw_from_lp,
215+
state='disabled',
192216
)
193217

194218
def create_menu(self):
@@ -207,7 +231,9 @@ def setup_layout(self):
207231
self.frame_pooltool_helper.grid(row=2, column=1, columnspan=2, padx=5, pady=5)
208232
self.frame_deposit.grid(row=3, column=1, columnspan=2, padx=5, pady=5)
209233
self.frame_deposit_upper.grid(row=0, column=0, padx=5, pady=5)
210-
self.frame_deposit_lower.grid(row=1, column=0, padx=5, pady=5)
234+
# self.frame_deposit_lower.grid(row=1, column=0, padx=5, pady=5)
235+
self.frame_withdraw.grid(row=4, column=1, columnspan=2, padx=5, pady=5)
236+
self.frame_withdraw_inner.grid(row=0, column=0, padx=5, pady=5)
211237

212238
# pool info
213239
self.lbl_pool_id.grid(row=0, column=0, padx=5, sticky='w')
@@ -242,11 +268,16 @@ def setup_layout(self):
242268
# deposit section
243269
self.ent_assetx_amount.grid(row=0, column=0, padx=5, pady=5)
244270
self.lbl_assetx_deposit.grid(row=0, column=1, padx=5, pady=5, sticky='w')
245-
self.btn_check_deposit.grid(row=0, column=2, padx=5, pady=5)
271+
# self.btn_check_deposit.grid(row=0, column=2, padx=5, pady=5)
246272
self.ent_assety_amount.grid(row=1, column=0, padx=5, pady=5)
247273
self.lbl_assety_deposit.grid(row=1, column=1, padx=5, pady=5, sticky='w')
248274
self.btn_deposit.grid(row=1, column=2, padx=5, pady=5)
249275

276+
# withdraw section
277+
self.ent_poolasset_amount.grid(row=0, column=0, padx=5, pady=5)
278+
self.lbl_poolasset_name.grid(row=0, column=1, padx=5, pady=5)
279+
self.btn_withdraw.grid(row=0, column=2, padx=5, pady=5)
280+
250281
def get_string_var(self):
251282
self.string_var = {}
252283
self.string_var['sv_lbl_pool_id'] = tk.StringVar()
@@ -275,6 +306,8 @@ def get_string_var(self):
275306
self.string_var['lbl_poolshare_deposit'] = tk.StringVar()
276307
self.string_var['lbl_poolshare_symbol'] = tk.StringVar()
277308

309+
self.string_var['sv_lbl_poolasset_name'] = tk.StringVar()
310+
278311
def assign_string_var(self):
279312
self.string_var['sv_lbl_pool_id'].set('Pool:')
280313
self.string_var['sv_lbl_pool_name'].set('Pool name:')
@@ -302,6 +335,8 @@ def assign_string_var(self):
302335
self.string_var['lbl_poolshare_deposit'].set('0')
303336
self.string_var['lbl_poolshare_symbol'].set('Share Asset')
304337

338+
self.string_var['sv_lbl_poolasset_name'].set('(Pool Asset)')
339+
305340
def set_dropdown_values(self, settings):
306341
self.cmb_pool_id['values'] = settings['valid_assets']
307342

@@ -320,6 +355,8 @@ def update_gui(self, data):
320355
self.string_var['sv_lbl_market_base_volume'].set('24hr Base Volume: {}'.format(data['market_ticker_object']['baseVolume']))
321356
self.string_var['sv_lbl_market_quote_volume'].set('24hr Quote Volume: {}'.format(data['market_ticker_object']['quoteVolume']))
322357

358+
self.string_var['sv_lbl_poolasset_name'].set(data['pool_name'])
359+
323360
self.string_var['ls_assets'].set([data['asset_x'].symbol, data['asset_y'].symbol])
324361
self.string_var['lbl_helper_market_price'].set('')
325362
self.string_var['lbl_helper_pool_price'].set('')
@@ -339,6 +376,8 @@ def update_gui(self, data):
339376
self.ent_assetx_amount['state'] = 'normal'
340377
self.ent_assety_amount['state'] = 'normal'
341378
self.btn_deposit['state'] = 'enabled'
379+
self.btn_withdraw['state'] = 'enabled'
380+
self.ent_poolasset_amount['state'] = 'normal'
342381

343382
self.loading_pop_up.destroy()
344383
self.window.update()
@@ -390,6 +429,25 @@ def deposit_to_lp(self):
390429
self.deposit_popup()
391430
pub.sendMessage('deposit_lp', data=data)
392431

432+
def withdraw_from_lp(self):
433+
data = {
434+
'withdraw_amount': self.ent_poolasset_amount.get(),
435+
'asset': self.string_var['sv_lbl_poolasset_name'].get(),
436+
}
437+
answer = messagebox.askyesno(
438+
'Verify Action',
439+
'You want to withdraw {} {} from the Liquidity Pool?'.format(
440+
data['withdraw_amount'],
441+
data['asset'],
442+
),
443+
parent=self.window
444+
)
445+
if answer:
446+
data['account'] = simpledialog.askstring('Account Name', 'Enter your account:', parent=self.window)
447+
data['key'] = simpledialog.askstring('Active Key', 'Enter your active key:', show='*', parent=self.window)
448+
self.withdraw_popup()
449+
pub.sendMessage('withdraw_lp', data=data)
450+
393451
def take_offer(self):
394452
data = {
395453
'market_or_pool': self.string_var['rd_market_or_pool'].get(),
@@ -443,6 +501,20 @@ def print_deposit(self, data):
443501
parent=self.window,
444502
)
445503

504+
def print_withdraw(self, data):
505+
if len(data) != 0:
506+
self.withdraw_pop_up.destroy()
507+
self.window.update()
508+
messagebox.showinfo(
509+
'Withdraw Data',
510+
'Withdrew:\n\t{}\nReceived:\n\t{}\n\t{}'.format(
511+
data['paid'],
512+
data['received_x'],
513+
data['received_y']
514+
),
515+
parent=self.window,
516+
)
517+
446518
def deposit_popup(self):
447519
self.deposit_pop_up = tk.Toplevel(
448520
self.window
@@ -456,6 +528,20 @@ def deposit_popup(self):
456528
)
457529
self.lbl_deposit_pop.grid(row=0, column=0, padx=5, pady=5)
458530
self.deposit_pop_up.update()
531+
532+
def withdraw_popup(self):
533+
self.withdraw_pop_up = tk.Toplevel(
534+
self.window
535+
)
536+
pos_x = self.window.winfo_x()
537+
pos_y = self.window.winfo_y()
538+
self.withdraw_pop_up.geometry(f'+{pos_x}+{pos_y}')
539+
self.lbl_withdraw_pop = tk.Label(
540+
self.withdraw_pop_up,
541+
text='withdrawing from liquidity pool...'
542+
)
543+
self.lbl_withdraw_pop.grid(row=0, column=0, padx=5, pady=5)
544+
self.withdraw_pop_up.update()
459545

460546
def loading_popup(self):
461547
self.loading_pop_up = tk.Toplevel(

0 commit comments

Comments
 (0)