mirror of
https://github.com/aljazceru/lnflow.git
synced 2025-12-23 07:24:20 +01:00
225 lines
11 KiB
Bash
Executable File
225 lines
11 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Lightning Fee Optimizer - Advanced Strategy with Inbound Fees
|
|
#
|
|
# This script includes both outbound and inbound fee optimization to:
|
|
# 1. Prevent outbound drains
|
|
# 2. Encourage proper liquidity distribution
|
|
# 3. Maximize routing revenue
|
|
# 4. Signal liquidity scarcity effectively
|
|
#
|
|
# REQUIREMENTS:
|
|
# - LND with inbound fee support
|
|
# - Add to lnd.conf: accept-positive-inbound-fees=true (for positive inbound fees)
|
|
#
|
|
# WARNING: This will modify both outbound AND inbound channel fees!
|
|
|
|
set -e
|
|
|
|
echo "Lightning Fee Optimizer - Advanced Inbound Fee Strategy"
|
|
echo "========================================================="
|
|
echo ""
|
|
echo "This strategy uses BOTH outbound and inbound fees for optimal liquidity management:"
|
|
echo "• Outbound fees: Control routing through your channels"
|
|
echo "• Inbound fees: Prevent drains and encourage balanced flow"
|
|
echo ""
|
|
|
|
read -p "Have you added 'accept-positive-inbound-fees=true' to lnd.conf? (yes/no): " inbound_ready
|
|
if [[ $inbound_ready != "yes" ]]; then
|
|
echo "WARNING: Please add 'accept-positive-inbound-fees=true' to lnd.conf and restart LND first"
|
|
echo "This enables positive inbound fees for advanced liquidity management"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
read -p "Apply advanced fee strategy with inbound fees? (yes/no): " confirm
|
|
if [[ $confirm != "yes" ]]; then
|
|
echo "Aborted."
|
|
exit 0
|
|
fi
|
|
|
|
# Function to update channel policy with both outbound and inbound fees
|
|
update_channel_advanced() {
|
|
local channel_id=$1
|
|
local outbound_rate=$2
|
|
local inbound_rate=$3
|
|
local inbound_base=${4:-0}
|
|
local reason="$5"
|
|
local strategy="$6"
|
|
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "Channel: $channel_id"
|
|
echo "Strategy: $strategy"
|
|
echo "Outbound Fee: ${outbound_rate} ppm"
|
|
if [[ $inbound_rate -gt 0 ]]; then
|
|
echo "Inbound Fee: +${inbound_rate} ppm (encourages inbound flow)"
|
|
elif [[ $inbound_rate -lt 0 ]]; then
|
|
echo "Inbound Discount: ${inbound_rate} ppm (discourages drains)"
|
|
else
|
|
echo "Inbound Fee: ${inbound_rate} ppm (neutral)"
|
|
fi
|
|
echo "Reason: $reason"
|
|
echo ""
|
|
|
|
# Build the complete lncli command with inbound fees
|
|
cmd="lncli updatechanpolicy --chan_id \"$channel_id\" \
|
|
--fee_rate $outbound_rate \
|
|
--base_fee_msat 0 \
|
|
--time_lock_delta 80 \
|
|
--inbound_fee_rate_ppm $inbound_rate \
|
|
--inbound_base_fee_msat $inbound_base"
|
|
|
|
echo "Command: $cmd"
|
|
|
|
# Uncomment to execute:
|
|
# eval $cmd
|
|
|
|
echo "Advanced policy prepared (not executed)"
|
|
echo ""
|
|
}
|
|
|
|
echo ""
|
|
echo "DRAIN PROTECTION STRATEGY"
|
|
echo "Protect high-earning channels from being drained by setting inbound fees"
|
|
echo ""
|
|
|
|
# High-earning channels that are being drained - use inbound fees to protect
|
|
update_channel_advanced "799714x355x0" 245 150 0 "High earner being drained - set inbound fee to preserve local balance" "DRAIN_PROTECTION"
|
|
update_channel_advanced "878853x1612x1" 297 150 0 "High earner being drained - set inbound fee to preserve local balance" "DRAIN_PROTECTION"
|
|
update_channel_advanced "691130x155x1" 188 100 0 "Medium earner being drained - moderate inbound fee protection" "DRAIN_PROTECTION"
|
|
update_channel_advanced "903613x2575x1" 202 100 0 "Medium earner being drained - moderate inbound fee protection" "DRAIN_PROTECTION"
|
|
update_channel_advanced "881262x147x1" 250 100 0 "Channel being drained - inbound fee to preserve balance" "DRAIN_PROTECTION"
|
|
|
|
echo ""
|
|
echo "💧 LIQUIDITY ATTRACTION STRATEGY"
|
|
echo "Use negative inbound fees (discounts) to attract liquidity to depleted channels"
|
|
echo ""
|
|
|
|
# Channels with too much local balance - use negative inbound fees to encourage inbound flow
|
|
update_channel_advanced "845867x2612x0" 80 -30 0 "Channel has 99.9% local balance - discount inbound to encourage rebalancing" "LIQUIDITY_ATTRACTION"
|
|
update_channel_advanced "902317x2151x0" 28 -20 0 "Channel has 98.8% local balance - discount inbound flow" "LIQUIDITY_ATTRACTION"
|
|
update_channel_advanced "900023x1554x0" 22 -15 0 "Channel has 99.9% local balance - small inbound discount" "LIQUIDITY_ATTRACTION"
|
|
update_channel_advanced "903561x1516x0" 72 -25 0 "Overly balanced channel - encourage some inbound flow" "LIQUIDITY_ATTRACTION"
|
|
|
|
echo ""
|
|
echo "BALANCED OPTIMIZATION STRATEGY"
|
|
echo "Fine-tune both inbound and outbound fees on high-performing channels"
|
|
echo ""
|
|
|
|
# High-performing channels - small adjustments to both inbound and outbound
|
|
update_channel_advanced "803265x3020x1" 229 25 0 "Top performer - small inbound fee to prevent over-routing" "BALANCED_OPTIMIZATION"
|
|
update_channel_advanced "779651x576x1" 11 5 0 "Massive flow channel - tiny inbound fee for balance" "BALANCED_OPTIMIZATION"
|
|
update_channel_advanced "880360x2328x1" 96 15 0 "High performer - small inbound fee for optimal balance" "BALANCED_OPTIMIZATION"
|
|
update_channel_advanced "890401x1900x1" 11 5 0 "Strong performer - minimal inbound fee" "BALANCED_OPTIMIZATION"
|
|
update_channel_advanced "721508x1824x1" 11 5 0 "Excellent flow - minimal inbound adjustment" "BALANCED_OPTIMIZATION"
|
|
|
|
echo ""
|
|
echo "FLOW OPTIMIZATION STRATEGY"
|
|
echo "Optimize bidirectional flow with asymmetric fee strategies"
|
|
echo ""
|
|
|
|
# Channels with flow imbalances - use inbound fees to encourage better balance
|
|
update_channel_advanced "893297x1850x1" 23 -10 0 "Too much local balance - discount inbound to rebalance" "FLOW_OPTIMIZATION"
|
|
update_channel_advanced "902817x2318x1" 24 -10 0 "Needs more inbound - small discount to encourage" "FLOW_OPTIMIZATION"
|
|
update_channel_advanced "904664x2249x4" 104 10 0 "Well balanced - small inbound fee to maintain" "FLOW_OPTIMIZATION"
|
|
update_channel_advanced "903294x1253x1" 102 10 0 "Good balance - small inbound fee to preserve" "FLOW_OPTIMIZATION"
|
|
|
|
echo ""
|
|
echo "ACTIVATION STRATEGY"
|
|
echo "Use aggressive inbound discounts to activate dormant channels"
|
|
echo ""
|
|
|
|
# Low activity channels - aggressive inbound discounts to attract routing
|
|
update_channel_advanced "687420x2350x1" 25 -50 0 "Dormant channel - aggressive inbound discount to attract routing" "ACTIVATION"
|
|
update_channel_advanced "691153x813x1" 7 -30 0 "Low activity - large inbound discount for activation" "ACTIVATION"
|
|
update_channel_advanced "896882x554x1" 49 -40 0 "Underused channel - significant inbound discount" "ACTIVATION"
|
|
|
|
echo ""
|
|
echo "MONITORING COMMANDS FOR INBOUND FEES"
|
|
echo "════════════════════════════════════════"
|
|
echo ""
|
|
|
|
echo "# Check all channel policies including inbound fees:"
|
|
echo "lncli listchannels | jq '.channels[] | {chan_id: .chan_id[0:13], local_balance, remote_balance, local_fee: .local_constraints.fee_base_msat, outbound_fee: .local_constraints.fee_rate_milli_msat}'"
|
|
echo ""
|
|
|
|
echo "# Check specific channel's inbound fee policy:"
|
|
echo "lncli getchaninfo --chan_id CHANNEL_ID | jq '.node1_policy, .node2_policy'"
|
|
echo ""
|
|
|
|
echo "# Monitor routing success rate (important with inbound fees):"
|
|
echo "lncli queryroutes --dest=DESTINATION_PUBKEY --amt=100000 | jq '.routes[].total_fees'"
|
|
echo ""
|
|
|
|
echo "# Track forwarding events with fee breakdown:"
|
|
echo "lncli fwdinghistory --max_events 20 | jq '.forwarding_events[] | {chan_id_in, chan_id_out, fee_msat, amt_msat}'"
|
|
|
|
echo ""
|
|
echo "INBOUND FEE STRATEGY EXPLANATION"
|
|
echo "══════════════════════════════════════"
|
|
echo ""
|
|
echo "DRAIN PROTECTION: Positive inbound fees (50-150 ppm)"
|
|
echo " • Discourages peers from pushing all their funds through you"
|
|
echo " • Compensates you for the liquidity service"
|
|
echo " • Protects your most valuable routing channels"
|
|
echo ""
|
|
echo "💧 LIQUIDITY ATTRACTION: Negative inbound fees (-15 to -50 ppm)"
|
|
echo " • Provides discounts to encourage inbound payments"
|
|
echo " • Helps rebalance channels with too much local liquidity"
|
|
echo " • Backwards compatible (older nodes see it as regular discount)"
|
|
echo ""
|
|
echo "BALANCED OPTIMIZATION: Small positive inbound fees (5-25 ppm)"
|
|
echo " • Fine-tunes flow on high-performing channels"
|
|
echo " • Prevents over-utilization in one direction"
|
|
echo " • Maximizes total fee income"
|
|
echo ""
|
|
echo "FLOW OPTIMIZATION: Mixed strategy based on current balance"
|
|
echo " • Asymmetric fees to encourage bidirectional flow"
|
|
echo " • Dynamic based on current liquidity distribution"
|
|
echo ""
|
|
echo "ACTIVATION: Aggressive negative inbound fees (-30 to -50 ppm)"
|
|
echo " • Last resort for dormant channels"
|
|
echo " • Makes your channels very attractive for routing"
|
|
echo " • Higher risk but potential for activation"
|
|
|
|
echo ""
|
|
echo "💰 PROJECTED BENEFITS WITH INBOUND FEES"
|
|
echo "════════════════════════════════════════"
|
|
echo ""
|
|
echo "• Drain Protection: Save ~5,000-10,000 sats/month from prevented drains"
|
|
echo "• Better Balance: Reduce rebalancing costs by 20-30%"
|
|
echo "• Optimal Routing: Increase fee income by 15-25% through better flow control"
|
|
echo "• Channel Longevity: Channels stay profitable longer with proper balance"
|
|
echo ""
|
|
echo "Total estimated additional benefit: +10,000-20,000 sats/month"
|
|
|
|
echo ""
|
|
echo "IMPLEMENTATION NOTES"
|
|
echo "════════════════════════════"
|
|
echo ""
|
|
echo "1. COMPATIBILITY: Inbound fees require updated nodes"
|
|
echo "2. TESTING: Start with small inbound fees and monitor routing success"
|
|
echo "3. MONITORING: Watch for routing failures - some older nodes may struggle"
|
|
echo "4. GRADUAL: Apply inbound fee strategy gradually over 2-3 weeks"
|
|
echo "5. BALANCE: Keep total fees (inbound + outbound) reasonable"
|
|
|
|
echo ""
|
|
echo "ROLLBACK COMMANDS (inbound fees back to 0)"
|
|
echo "═══════════════════════════════════════════════"
|
|
echo ""
|
|
echo "# Remove all inbound fees (set to 0):"
|
|
echo "lncli updatechanpolicy --chan_id 799714x355x0 --fee_rate 245 --inbound_fee_rate_ppm 0"
|
|
echo "lncli updatechanpolicy --chan_id 878853x1612x1 --fee_rate 297 --inbound_fee_rate_ppm 0"
|
|
echo "lncli updatechanpolicy --chan_id 803265x3020x1 --fee_rate 209 --inbound_fee_rate_ppm 0"
|
|
echo "# ... (add more as needed)"
|
|
|
|
echo ""
|
|
echo "To execute this advanced strategy:"
|
|
echo "1. Ensure LND has inbound fee support enabled"
|
|
echo "2. Review each command carefully"
|
|
echo "3. Uncomment the 'eval \$cmd' line"
|
|
echo "4. Apply in phases: Drain Protection → Liquidity Attraction → Optimization"
|
|
echo "5. Monitor routing success rates closely"
|
|
echo ""
|
|
echo "This advanced strategy should increase your monthly revenue by 35-40% total"
|
|
echo " (24.6% from outbound optimization + 10-15% from inbound fee management)" |