Ejemplo n.º 1
0
def main():
    parser = Parser()
    args = parser.parse_arguments()
    # print(args)

    if args.cmd is None:
        parser.parser.print_help()
        return 0

    # program execution
    if args.loglevel:
        # update the loglevel of the stdout handler to the user choice
        logger.handlers[0].setLevel(args.loglevel)

    node = LndNode()

    if args.cmd == 'status':
        node.print_status()

    elif args.cmd == 'listchannels':
        if not args.subcmd:
            print_channels_rebalance(node, unbalancedness_greater_than=0)
        if args.subcmd == 'rebalance':
            print_channels_rebalance(node, args.unbalancedness, sort_by='ub')
        elif args.subcmd == 'inactive':
            print_channels_hygiene(node)
        elif args.subcmd == 'forwardings':
            # convert time interval into unix timestamp
            time_from = time.time() - args.from_days_ago * 24 * 60 * 60
            time_to = time.time() - args.to_days_ago * 24 * 60 * 60
            print_channels_forwardings(node,
                                       sort_by=args.sort_by,
                                       time_interval_start=time_from,
                                       time_interval_end=time_to)

    elif args.cmd == 'rebalance':
        if args.target:
            logger.warning(
                "Warning: Target is set, this is still an experimental feature."
            )
        rebalancer = Rebalancer(node, args.max_fee_rate, args.max_fee_sat)
        try:
            rebalancer.rebalance(args.channel,
                                 dry=not args.reckless,
                                 chunksize=args.chunksize,
                                 target=args.target,
                                 allow_unbalancing=args.allow_unbalancing,
                                 strategy=args.strategy)
        except RebalanceFailure as e:
            logger.error(f"Error: {e}")

    elif args.cmd == 'circle':
        rebalancer = Rebalancer(node, args.max_fee_rate, args.max_fee_sat)
        invoice_r_hash = node.get_rebalance_invoice(memo='circular payment')
        try:
            rebalancer.rebalance_two_channels(args.channel_from,
                                              args.channel_to,
                                              args.amt_sats,
                                              invoice_r_hash,
                                              args.max_fee_sat,
                                              dry=not args.reckless)
        except DryRunException:
            logger.info("This was just a dry run.")
        except TooExpensive:
            logger.error(
                "Payment failed. This is likely due to a too low default --max-fee-rate."
            )
        except PaymentTimeOut:
            logger.error(
                "Payment failed because the payment timed out. This is an unresolved issue."
            )

    elif args.cmd == 'recommend-nodes':

        if not args.subcmd:
            parser.parser_recommend_nodes.print_help()
            return 0

        recommend_nodes = RecommendNodes(node,
                                         show_connected=args.show_connected,
                                         show_addresses=args.show_addresses)
        if args.subcmd == 'good-old':
            recommend_nodes.print_good_old(number_of_nodes=args.nnodes,
                                           sort_by=args.sort_by)
Ejemplo n.º 2
0
import _settings
from lib.listchannels import print_channels_rebalance
from lib.node import LndNode

import logging.config

logging.config.dictConfig(_settings.logger_config)

if __name__ == '__main__':
    node = LndNode()
    node.print_status()
    print_channels_rebalance(
        node, unbalancedness_greater_than=_settings.UNBALANCED_CHANNEL)