C-Otto / lnd-manageJ

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Feature Request: Support #pickhardtpayments

C-Otto opened this issue · comments

Support #pickhardtpayments as described in https://github.com/renepickhardt/mpp-splitter/blob/master/Minimal%20Linearized%20min%20cost%20flow%20example%20for%20MPP.ipynb.

  • compute MPP based on flow information
  • combine probability and fees in cost function
  • optimize N (number of piecewise linear approximations)
  • what if capacity % N != 0?
  • use different values for N depending on channel size?
  • what if amount % quantization != 0?
  • what if amount < quantization?
  • limit graph to zero base fee channels
  • add support for non-zero base fee channels (moved to #31)
  • consider max_htlc for channels
  • make use of mission control information (see #7)
  • send out MPP
  • add payment loop (deal with failed parts of MPP, try those again) (blocked by lightningnetwork/lnd#5746)
  • make N, quantization, ... configurable (see #5)
  • add switch to ignore fees of local channels (for outgoing payments) (moved to #33)
  • solve startup issues wrt. OR tools native library loader
  • solve pitest issues wrt. OR tools native library loader
  • what if there are several parallel channels and the flow picks an amount that is more than each individual channel's capacity?
  • combine parallel channels?
  • add known liquidity for local channels
  • do not forget about disabled/broken channels straight away (set upper bound to 1 instead of 0?)
  • fail everything on first INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS failure
  • document middleware requirement
  • fix "upper bound" vs. "in flight"
  • handle failures:
    • INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS = 1;
    • INCORRECT_PAYMENT_AMOUNT = 2;
    • FINAL_INCORRECT_CLTV_EXPIRY = 3;
    • FINAL_INCORRECT_HTLC_AMOUNT = 4;
    • FINAL_EXPIRY_TOO_SOON = 5;
    • INVALID_REALM = 6;
    • EXPIRY_TOO_SOON = 7;
    • INVALID_ONION_VERSION = 8;
    • INVALID_ONION_HMAC = 9;
    • INVALID_ONION_KEY = 10;
    • AMOUNT_BELOW_MINIMUM = 11;
    • FEE_INSUFFICIENT = 12;
    • INCORRECT_CLTV_EXPIRY = 13;
    • CHANNEL_DISABLED = 14;
    • TEMPORARY_CHANNEL_FAILURE = 15;
    • REQUIRED_NODE_FEATURE_MISSING = 16;
    • REQUIRED_CHANNEL_FEATURE_MISSING = 17;
    • UNKNOWN_NEXT_PEER = 18;
    • TEMPORARY_NODE_FAILURE = 19;
    • PERMANENT_NODE_FAILURE = 20;
    • PERMANENT_CHANNEL_FAILURE = 21;
    • EXPIRY_TOO_FAR = 22;
    • MPP_TIMEOUT = 23;
    • INVALID_ONION_PAYLOAD = 24;
    • other/unknown