Skip to content

Commit

Permalink
Added Withdraw Support
Browse files Browse the repository at this point in the history
- added functionality to withdraw from LP
  • Loading branch information
iamredbar committed Dec 24, 2020
1 parent 39a7ace commit 1f8eb67
Show file tree
Hide file tree
Showing 3 changed files with 137 additions and 16 deletions.
8 changes: 8 additions & 0 deletions controller.py
Expand Up @@ -17,10 +17,12 @@ def __init__(self, window):
pub.subscribe(self.quit_program_requested, 'quit_program_requested')
pub.subscribe(self.asset_of_interest_change, 'asset_of_interest_change')
pub.subscribe(self.deposit_lp, 'deposit_lp')
pub.subscribe(self.withdraw_lp, 'withdraw_lp')
pub.subscribe(self.update_gui, 'update_gui')
pub.subscribe(self.update_trading_prices, 'update_trading_prices')
pub.subscribe(self.print_transaction, 'print_transaction')
pub.subscribe(self.print_deposit, 'print_deposit')
pub.subscribe(self.print_withdraw, 'print_withdraw')
pub.subscribe(self.invalid_pool, 'invalid_pool')

def invalid_pool(self):
Expand All @@ -29,6 +31,12 @@ def invalid_pool(self):
def print_deposit(self, data):
self.view.print_deposit(data)

def print_withdraw(self, data):
self.view.print_withdraw(data)

def withdraw_lp(self, data):
self.model.withdraw_lp(data)

def deposit_lp(self, data):
self.model.deposit_lp(data)

Expand Down
27 changes: 27 additions & 0 deletions model.py
Expand Up @@ -151,6 +151,33 @@ def deposit_lp(self, data):
else:
print('deposit operation failed')

def withdraw_lp(self, data):
trade_message = ''
new_data = {}
try:
bitshares = BitShares(nobroadcast=False, keys=data['key'], blocking='head')
trade_message = bitshares.withdraw_from_liquidity_pool(
pool=data['asset'],
share_amount=Amount(
data['withdraw_amount'],
data['asset'],
),
account=data['account'],
)
new_data['operation_results'] = trade_message['operation_results']
except Exception as err:
print(err)
if new_data:
try:
new_data['paid'] = Amount(new_data['operation_results'][0][1]['paid'][0])
new_data['received_x'] = Amount(new_data['operation_results'][0][1]['received'][0])
new_data['received_y'] = Amount(new_data['operation_results'][0][1]['received'][1])
pub.sendMessage('print_withdraw', data=new_data)
except:
print('error parsing withdraw operation results')
else:
print('withdraw operation failed')

def take_offer(self, data):
bitshares = BitShares(nobroadcast=False, keys=data['key'], blocking='head')
trade_message = ''
Expand Down
118 changes: 102 additions & 16 deletions view.py
Expand Up @@ -43,8 +43,15 @@ def create_widgets(self):
self.frame_deposit_upper = tk.Frame(
self.frame_deposit,
)
self.frame_deposit_lower = tk.Frame(
self.frame_deposit
# self.frame_deposit_lower = tk.Frame(
# self.frame_deposit
# )
self.frame_withdraw = tk.Frame(
self.window,
background='#c9c9c9',
)
self.frame_withdraw_inner = tk.Frame(
self.frame_withdraw,
)

# pool info widgets
Expand Down Expand Up @@ -170,25 +177,42 @@ def create_widgets(self):
self.frame_deposit_upper,
textvariable=self.string_var['lbl_assety_deposit']
)
self.btn_check_deposit = ttk.Button(
self.frame_deposit_upper,
text='Estimate Coming Soon',
command=self.update_shares,
state='disabled',
)
# self.btn_check_deposit = ttk.Button(
# self.frame_deposit_upper,
# text='Estimate Coming Soon',
# command=self.update_shares,
# state='disabled',
# )
self.btn_deposit = ttk.Button(
self.frame_deposit_upper,
text='Deposit to LP',
command=self.deposit_to_lp,
state='disabled',
)
self.lbl_poolshare_deposit = tk.Label(
self.frame_deposit_lower,
textvariable=self.string_var['lbl_poolshare_deposit'],
# self.lbl_poolshare_deposit = tk.Label(
# self.frame_deposit_lower,
# textvariable=self.string_var['lbl_poolshare_deposit'],
# )
# self.lbl_poolshare_symbol = tk.Label(
# self.frame_deposit_lower,
# textvariable=self.string_var['lbl_poolshare_symbol']
# )
# withdraw widgets
self.ent_poolasset_amount = tk.Entry(
self.frame_withdraw_inner,
width=10,
state='disabled',
justify='right',
)
self.lbl_poolshare_symbol = tk.Label(
self.frame_deposit_lower,
textvariable=self.string_var['lbl_poolshare_symbol']
self.lbl_poolasset_name = tk.Label(
self.frame_withdraw_inner,
textvariable=self.string_var['sv_lbl_poolasset_name']
)
self.btn_withdraw = ttk.Button(
self.frame_withdraw_inner,
text='Withdraw from LP',
command=self.withdraw_from_lp,
state='disabled',
)

def create_menu(self):
Expand All @@ -207,7 +231,9 @@ def setup_layout(self):
self.frame_pooltool_helper.grid(row=2, column=1, columnspan=2, padx=5, pady=5)
self.frame_deposit.grid(row=3, column=1, columnspan=2, padx=5, pady=5)
self.frame_deposit_upper.grid(row=0, column=0, padx=5, pady=5)
self.frame_deposit_lower.grid(row=1, column=0, padx=5, pady=5)
# self.frame_deposit_lower.grid(row=1, column=0, padx=5, pady=5)
self.frame_withdraw.grid(row=4, column=1, columnspan=2, padx=5, pady=5)
self.frame_withdraw_inner.grid(row=0, column=0, padx=5, pady=5)

# pool info
self.lbl_pool_id.grid(row=0, column=0, padx=5, sticky='w')
Expand Down Expand Up @@ -242,11 +268,16 @@ def setup_layout(self):
# deposit section
self.ent_assetx_amount.grid(row=0, column=0, padx=5, pady=5)
self.lbl_assetx_deposit.grid(row=0, column=1, padx=5, pady=5, sticky='w')
self.btn_check_deposit.grid(row=0, column=2, padx=5, pady=5)
# self.btn_check_deposit.grid(row=0, column=2, padx=5, pady=5)
self.ent_assety_amount.grid(row=1, column=0, padx=5, pady=5)
self.lbl_assety_deposit.grid(row=1, column=1, padx=5, pady=5, sticky='w')
self.btn_deposit.grid(row=1, column=2, padx=5, pady=5)

# withdraw section
self.ent_poolasset_amount.grid(row=0, column=0, padx=5, pady=5)
self.lbl_poolasset_name.grid(row=0, column=1, padx=5, pady=5)
self.btn_withdraw.grid(row=0, column=2, padx=5, pady=5)

def get_string_var(self):
self.string_var = {}
self.string_var['sv_lbl_pool_id'] = tk.StringVar()
Expand Down Expand Up @@ -275,6 +306,8 @@ def get_string_var(self):
self.string_var['lbl_poolshare_deposit'] = tk.StringVar()
self.string_var['lbl_poolshare_symbol'] = tk.StringVar()

self.string_var['sv_lbl_poolasset_name'] = tk.StringVar()

def assign_string_var(self):
self.string_var['sv_lbl_pool_id'].set('Pool:')
self.string_var['sv_lbl_pool_name'].set('Pool name:')
Expand Down Expand Up @@ -302,6 +335,8 @@ def assign_string_var(self):
self.string_var['lbl_poolshare_deposit'].set('0')
self.string_var['lbl_poolshare_symbol'].set('Share Asset')

self.string_var['sv_lbl_poolasset_name'].set('(Pool Asset)')

def set_dropdown_values(self, settings):
self.cmb_pool_id['values'] = settings['valid_assets']

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

self.string_var['sv_lbl_poolasset_name'].set(data['pool_name'])

self.string_var['ls_assets'].set([data['asset_x'].symbol, data['asset_y'].symbol])
self.string_var['lbl_helper_market_price'].set('')
self.string_var['lbl_helper_pool_price'].set('')
Expand All @@ -339,6 +376,8 @@ def update_gui(self, data):
self.ent_assetx_amount['state'] = 'normal'
self.ent_assety_amount['state'] = 'normal'
self.btn_deposit['state'] = 'enabled'
self.btn_withdraw['state'] = 'enabled'
self.ent_poolasset_amount['state'] = 'normal'

self.loading_pop_up.destroy()
self.window.update()
Expand Down Expand Up @@ -390,6 +429,25 @@ def deposit_to_lp(self):
self.deposit_popup()
pub.sendMessage('deposit_lp', data=data)

def withdraw_from_lp(self):
data = {
'withdraw_amount': self.ent_poolasset_amount.get(),
'asset': self.string_var['sv_lbl_poolasset_name'].get(),
}
answer = messagebox.askyesno(
'Verify Action',
'You want to withdraw {} {} from the Liquidity Pool?'.format(
data['withdraw_amount'],
data['asset'],
),
parent=self.window
)
if answer:
data['account'] = simpledialog.askstring('Account Name', 'Enter your account:', parent=self.window)
data['key'] = simpledialog.askstring('Active Key', 'Enter your active key:', show='*', parent=self.window)
self.withdraw_popup()
pub.sendMessage('withdraw_lp', data=data)

def take_offer(self):
data = {
'market_or_pool': self.string_var['rd_market_or_pool'].get(),
Expand Down Expand Up @@ -443,6 +501,20 @@ def print_deposit(self, data):
parent=self.window,
)

def print_withdraw(self, data):
if len(data) != 0:
self.withdraw_pop_up.destroy()
self.window.update()
messagebox.showinfo(
'Withdraw Data',
'Withdrew:\n\t{}\nReceived:\n\t{}\n\t{}'.format(
data['paid'],
data['received_x'],
data['received_y']
),
parent=self.window,
)

def deposit_popup(self):
self.deposit_pop_up = tk.Toplevel(
self.window
Expand All @@ -456,6 +528,20 @@ def deposit_popup(self):
)
self.lbl_deposit_pop.grid(row=0, column=0, padx=5, pady=5)
self.deposit_pop_up.update()

def withdraw_popup(self):
self.withdraw_pop_up = tk.Toplevel(
self.window
)
pos_x = self.window.winfo_x()
pos_y = self.window.winfo_y()
self.withdraw_pop_up.geometry(f'+{pos_x}+{pos_y}')
self.lbl_withdraw_pop = tk.Label(
self.withdraw_pop_up,
text='withdrawing from liquidity pool...'
)
self.lbl_withdraw_pop.grid(row=0, column=0, padx=5, pady=5)
self.withdraw_pop_up.update()

def loading_popup(self):
self.loading_pop_up = tk.Toplevel(
Expand Down

0 comments on commit 1f8eb67

Please sign in to comment.