lnd.xprv/htlcswitch/failure_detail.go

98 lines
3.0 KiB
Go
Raw Normal View History

package htlcswitch
// FailureDetail is an interface implemented by failures that occur on
// our incoming or outgoing link, or within the switch itself.
type FailureDetail interface {
// FailureString returns the string representation of a failure
// detail.
FailureString() string
}
// OutgoingFailure is an enum which is used to enrich failures which occur in
// the switch or on our outgoing link with additional metadata.
type OutgoingFailure int
const (
// OutgoingFailureNone is returned when the wire message contains
// sufficient information.
OutgoingFailureNone OutgoingFailure = iota
// OutgoingFailureDecodeError indicates that we could not decode the
// failure reason provided for a failed payment.
OutgoingFailureDecodeError
// OutgoingFailureLinkNotEligible indicates that a routing attempt was
// made over a link that is not eligible for routing.
OutgoingFailureLinkNotEligible
// OutgoingFailureOnChainTimeout indicates that a payment had to be
// timed out on chain before it got past the first hop by us or the
// remote party.
OutgoingFailureOnChainTimeout
// OutgoingFailureHTLCExceedsMax is returned when a htlc exceeds our
// policy's maximum htlc amount.
OutgoingFailureHTLCExceedsMax
// OutgoingFailureInsufficientBalance is returned when we cannot route a
// htlc due to insufficient outgoing capacity.
OutgoingFailureInsufficientBalance
// OutgoingFailureCircularRoute is returned when an attempt is made
// to forward a htlc through our node which arrives and leaves on the
// same channel.
OutgoingFailureCircularRoute
// OutgoingFailureIncompleteForward is returned when we cancel an incomplete
// forward.
OutgoingFailureIncompleteForward
// OutgoingFailureDownstreamHtlcAdd is returned when we fail to add a
// downstream htlc to our outgoing link.
OutgoingFailureDownstreamHtlcAdd
// OutgoingFailureForwardsDisabled is returned when the switch is
// configured to disallow forwards.
OutgoingFailureForwardsDisabled
)
// FailureString returns the string representation of a failure detail.
//
// Note: it is part of the FailureDetail interface.
func (fd OutgoingFailure) FailureString() string {
switch fd {
case OutgoingFailureNone:
return "no failure detail"
case OutgoingFailureDecodeError:
return "could not decode wire failure"
case OutgoingFailureLinkNotEligible:
return "link not eligible"
case OutgoingFailureOnChainTimeout:
return "payment was resolved on-chain, then canceled back"
case OutgoingFailureHTLCExceedsMax:
return "htlc exceeds maximum policy amount"
case OutgoingFailureInsufficientBalance:
return "insufficient bandwidth to route htlc"
case OutgoingFailureCircularRoute:
return "same incoming and outgoing channel"
case OutgoingFailureIncompleteForward:
return "failed after detecting incomplete forward"
case OutgoingFailureDownstreamHtlcAdd:
return "could not add downstream htlc"
case OutgoingFailureForwardsDisabled:
return "node configured to disallow forwards"
default:
return "unknown failure detail"
}
}