Browse Source

Add lightning tag for commands

patch-4
MrNaif2018 4 years ago
parent
commit
299214835f
No known key found for this signature in database GPG Key ID: 5CDE50436C3DB40C
  1. 39
      electrum/commands.py

39
electrum/commands.py

@ -93,6 +93,7 @@ class Command:
self.requires_network = 'n' in s self.requires_network = 'n' in s
self.requires_wallet = 'w' in s self.requires_wallet = 'w' in s
self.requires_password = 'p' in s self.requires_password = 'p' in s
self.requires_lightning = 'l' in s
self.description = func.__doc__ self.description = func.__doc__
self.help = self.description.split('.')[0] if self.description else None self.help = self.description.split('.')[0] if self.description else None
varnames = func.__code__.co_varnames[1:func.__code__.co_argcount] varnames = func.__code__.co_varnames[1:func.__code__.co_argcount]
@ -145,6 +146,8 @@ def command(s):
raise Exception('wallet not loaded') raise Exception('wallet not loaded')
if cmd.requires_password and password is None and wallet.has_password(): if cmd.requires_password and password is None and wallet.has_password():
raise Exception('Password required') raise Exception('Password required')
if cmd.requires_lightning and (not wallet or not wallet.has_lightning()):
raise Exception('Lightning not enabled in this wallet')
return await func(*args, **kwargs) return await func(*args, **kwargs)
return func_wrapper return func_wrapper
return decorator return decorator
@ -707,7 +710,7 @@ class Commands:
return json_normalize(wallet.get_detailed_history(**kwargs)) return json_normalize(wallet.get_detailed_history(**kwargs))
@command('w') @command('wl')
async def lightning_history(self, show_fiat=False, wallet: Abstract_Wallet = None): async def lightning_history(self, show_fiat=False, wallet: Abstract_Wallet = None):
""" lightning history """ """ lightning history """
lightning_history = wallet.lnworker.get_history() if wallet.lnworker else [] lightning_history = wallet.lnworker.get_history() if wallet.lnworker else []
@ -884,7 +887,7 @@ class Commands:
wallet.add_payment_request(req) wallet.add_payment_request(req)
return wallet.export_request(req) return wallet.export_request(req)
@command('wn') @command('wnl')
async def add_lightning_request(self, amount, memo='', expiration=3600, wallet: Abstract_Wallet = None): async def add_lightning_request(self, amount, memo='', expiration=3600, wallet: Abstract_Wallet = None):
amount_sat = int(satoshis(amount)) amount_sat = int(satoshis(amount))
key = await wallet.lnworker._add_request_coro(amount_sat, memo, expiration) key = await wallet.lnworker._add_request_coro(amount_sat, memo, expiration)
@ -995,13 +998,13 @@ class Commands:
return sorted(known_commands.keys()) return sorted(known_commands.keys())
# lightning network commands # lightning network commands
@command('wn') @command('wnl')
async def add_peer(self, connection_string, timeout=20, gossip=False, wallet: Abstract_Wallet = None): async def add_peer(self, connection_string, timeout=20, gossip=False, wallet: Abstract_Wallet = None):
lnworker = self.network.lngossip if gossip else wallet.lnworker lnworker = self.network.lngossip if gossip else wallet.lnworker
await lnworker.add_peer(connection_string) await lnworker.add_peer(connection_string)
return True return True
@command('wn') @command('wnl')
async def list_peers(self, gossip=False, wallet: Abstract_Wallet = None): async def list_peers(self, gossip=False, wallet: Abstract_Wallet = None):
lnworker = self.network.lngossip if gossip else wallet.lnworker lnworker = self.network.lngossip if gossip else wallet.lnworker
return [{ return [{
@ -1012,7 +1015,7 @@ class Commands:
'channels': [c.funding_outpoint.to_str() for c in p.channels.values()], 'channels': [c.funding_outpoint.to_str() for c in p.channels.values()],
} for p in lnworker.peers.values()] } for p in lnworker.peers.values()]
@command('wpn') @command('wpnl')
async def open_channel(self, connection_string, amount, push_amount=0, password=None, wallet: Abstract_Wallet = None): async def open_channel(self, connection_string, amount, push_amount=0, password=None, wallet: Abstract_Wallet = None):
funding_sat = satoshis(amount) funding_sat = satoshis(amount)
push_sat = satoshis(push_amount) push_sat = satoshis(push_amount)
@ -1036,7 +1039,7 @@ class Commands:
invoice = LNInvoice.from_bech32(invoice) invoice = LNInvoice.from_bech32(invoice)
return invoice.to_debug_json() return invoice.to_debug_json()
@command('wn') @command('wnl')
async def lnpay(self, invoice, attempts=1, timeout=30, wallet: Abstract_Wallet = None): async def lnpay(self, invoice, attempts=1, timeout=30, wallet: Abstract_Wallet = None):
lnworker = wallet.lnworker lnworker = wallet.lnworker
lnaddr = lnworker._check_invoice(invoice) lnaddr = lnworker._check_invoice(invoice)
@ -1050,12 +1053,12 @@ class Commands:
'log': [x.formatted_tuple() for x in log] 'log': [x.formatted_tuple() for x in log]
} }
@command('w') @command('wl')
async def nodeid(self, wallet: Abstract_Wallet = None): async def nodeid(self, wallet: Abstract_Wallet = None):
listen_addr = self.config.get('lightning_listen') listen_addr = self.config.get('lightning_listen')
return bh2u(wallet.lnworker.node_keypair.pubkey) + (('@' + listen_addr) if listen_addr else '') return bh2u(wallet.lnworker.node_keypair.pubkey) + (('@' + listen_addr) if listen_addr else '')
@command('w') @command('wl')
async def list_channels(self, wallet: Abstract_Wallet = None): async def list_channels(self, wallet: Abstract_Wallet = None):
# FIXME: we need to be online to display capacity of backups # FIXME: we need to be online to display capacity of backups
from .lnutil import LOCAL, REMOTE, format_short_channel_id from .lnutil import LOCAL, REMOTE, format_short_channel_id
@ -1087,7 +1090,7 @@ class Commands:
} for channel_id, chan in backups } for channel_id, chan in backups
] ]
@command('wn') @command('wnl')
async def dumpgraph(self, wallet: Abstract_Wallet = None): async def dumpgraph(self, wallet: Abstract_Wallet = None):
return wallet.lnworker.channel_db.to_dict() return wallet.lnworker.channel_db.to_dict()
@ -1097,7 +1100,7 @@ class Commands:
fee_est = ast.literal_eval(fees) fee_est = ast.literal_eval(fees)
self.network.update_fee_estimates(fee_est=fee_est) self.network.update_fee_estimates(fee_est=fee_est)
@command('wn') @command('wnl')
async def enable_htlc_settle(self, b: bool, wallet: Abstract_Wallet = None): async def enable_htlc_settle(self, b: bool, wallet: Abstract_Wallet = None):
wallet.lnworker.enable_htlc_settle = b wallet.lnworker.enable_htlc_settle = b
@ -1116,14 +1119,14 @@ class Commands:
l = wallet.get_invoices() l = wallet.get_invoices()
return [wallet.export_invoice(x) for x in l] return [wallet.export_invoice(x) for x in l]
@command('wn') @command('wnl')
async def close_channel(self, channel_point, force=False, wallet: Abstract_Wallet = None): async def close_channel(self, channel_point, force=False, wallet: Abstract_Wallet = None):
txid, index = channel_point.split(':') txid, index = channel_point.split(':')
chan_id, _ = channel_id_from_funding_tx(txid, int(index)) chan_id, _ = channel_id_from_funding_tx(txid, int(index))
coro = wallet.lnworker.force_close_channel(chan_id) if force else wallet.lnworker.close_channel(chan_id) coro = wallet.lnworker.force_close_channel(chan_id) if force else wallet.lnworker.close_channel(chan_id)
return await coro return await coro
@command('wn') @command('wnl')
async def request_force_close(self, channel_point, connection_string=None, wallet: Abstract_Wallet = None): async def request_force_close(self, channel_point, connection_string=None, wallet: Abstract_Wallet = None):
""" """
Requests the remote to force close a channel. Requests the remote to force close a channel.
@ -1134,17 +1137,17 @@ class Commands:
chan_id, _ = channel_id_from_funding_tx(txid, int(index)) chan_id, _ = channel_id_from_funding_tx(txid, int(index))
await wallet.lnworker.request_force_close(chan_id, connect_str=connection_string) await wallet.lnworker.request_force_close(chan_id, connect_str=connection_string)
@command('w') @command('wl')
async def export_channel_backup(self, channel_point, wallet: Abstract_Wallet = None): async def export_channel_backup(self, channel_point, wallet: Abstract_Wallet = None):
txid, index = channel_point.split(':') txid, index = channel_point.split(':')
chan_id, _ = channel_id_from_funding_tx(txid, int(index)) chan_id, _ = channel_id_from_funding_tx(txid, int(index))
return wallet.lnworker.export_channel_backup(chan_id) return wallet.lnworker.export_channel_backup(chan_id)
@command('w') @command('wl')
async def import_channel_backup(self, encrypted, wallet: Abstract_Wallet = None): async def import_channel_backup(self, encrypted, wallet: Abstract_Wallet = None):
return wallet.lnworker.import_channel_backup(encrypted) return wallet.lnworker.import_channel_backup(encrypted)
@command('wn') @command('wnl')
async def get_channel_ctx(self, channel_point, iknowwhatimdoing=False, wallet: Abstract_Wallet = None): async def get_channel_ctx(self, channel_point, iknowwhatimdoing=False, wallet: Abstract_Wallet = None):
""" return the current commitment transaction of a channel """ """ return the current commitment transaction of a channel """
if not iknowwhatimdoing: if not iknowwhatimdoing:
@ -1156,12 +1159,12 @@ class Commands:
tx = chan.force_close_tx() tx = chan.force_close_tx()
return tx.serialize() return tx.serialize()
@command('wn') @command('wnl')
async def get_watchtower_ctn(self, channel_point, wallet: Abstract_Wallet = None): async def get_watchtower_ctn(self, channel_point, wallet: Abstract_Wallet = None):
""" return the local watchtower's ctn of channel. used in regtests """ """ return the local watchtower's ctn of channel. used in regtests """
return await self.network.local_watchtower.sweepstore.get_ctn(channel_point, None) return await self.network.local_watchtower.sweepstore.get_ctn(channel_point, None)
@command('wnp') @command('wnpl')
async def normal_swap(self, onchain_amount, lightning_amount, password=None, wallet: Abstract_Wallet = None): async def normal_swap(self, onchain_amount, lightning_amount, password=None, wallet: Abstract_Wallet = None):
""" """
Normal submarine swap: send on-chain BTC, receive on Lightning Normal submarine swap: send on-chain BTC, receive on Lightning
@ -1192,7 +1195,7 @@ class Commands:
'onchain_amount': format_satoshis(onchain_amount_sat), 'onchain_amount': format_satoshis(onchain_amount_sat),
} }
@command('wn') @command('wnl')
async def reverse_swap(self, lightning_amount, onchain_amount, wallet: Abstract_Wallet = None): async def reverse_swap(self, lightning_amount, onchain_amount, wallet: Abstract_Wallet = None):
"""Reverse submarine swap: send on Lightning, receive on-chain """Reverse submarine swap: send on Lightning, receive on-chain
""" """

Loading…
Cancel
Save