Ejemplo n.º 1
0
class TestRebalance(TestCase):
    def setUp(self):
        self.node = LndNode()

    def test_manual_rebalance(self):
        manual_rebalance(self.node, 000000000000000000, 000000000000000000, amt=141248, number_of_routes=5)

    def test_auto_rebalance(self):
        rebalancer = Rebalancer(self.node, max_effective_fee_rate=1, budget_sat=10)
        invoice_r_hash = self.node.get_rebalance_invoice(memo='autorebalance test')
        rebalancer.rebalance_two_channels(000000000000000000, 000000000000000000, amt_sat=1,
                                          invoice_r_hash=invoice_r_hash, budget_sat=10)

    def test_rebalance(self):
        rebalancer = Rebalancer(self.node, max_effective_fee_rate=0.0001, budget_sat=50)
        channel_id = 000000000000000000
        fee = rebalancer.rebalance(channel_id)
        print(fee)
Ejemplo n.º 2
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)