htlcswitch/hodl/flags: adds flags signifying switch breakpoints
This commit is contained in:
parent
e677b1e9c4
commit
941bdcafad
111
htlcswitch/hodl/flags.go
Normal file
111
htlcswitch/hodl/flags.go
Normal file
@ -0,0 +1,111 @@
|
||||
package hodl
|
||||
|
||||
import "fmt"
|
||||
|
||||
// MaskNone represents the empty Mask, in which no breakpoints are
|
||||
// active.
|
||||
const MaskNone = Mask(0)
|
||||
|
||||
type (
|
||||
// Flag represents a single breakpoint where an HTLC should be dropped
|
||||
// during forwarding. Flags can be composed into a Mask to express more
|
||||
// complex combinations.
|
||||
Flag uint32
|
||||
|
||||
// Mask is a bitvector combining multiple Flags that can be queried to
|
||||
// see which breakpoints are active.
|
||||
Mask uint32
|
||||
)
|
||||
|
||||
const (
|
||||
// ExitSettle drops an incoming ADD for which we are the exit node,
|
||||
// before processing in the link.
|
||||
ExitSettle Flag = 1 << iota
|
||||
|
||||
// AddIncoming drops an incoming ADD before processing if we are not
|
||||
// the exit node.
|
||||
AddIncoming
|
||||
|
||||
// SettleIncoming drops an incoming SETTLE before processing if we
|
||||
// are not the exit node.
|
||||
SettleIncoming
|
||||
|
||||
// FailIncoming drops an incoming FAIL before processing if we are
|
||||
// not the exit node.
|
||||
FailIncoming
|
||||
|
||||
// TODO(conner): add modes for switch breakpoints
|
||||
|
||||
// AddOutgoing drops an outgoing ADD before it is added to the
|
||||
// in-memory commitment state of the link.
|
||||
AddOutgoing
|
||||
|
||||
// SettleOutgoing drops an SETTLE before it is added to the
|
||||
// in-memory commitment state of the link.
|
||||
SettleOutgoing
|
||||
|
||||
// FailOutgoing drops an outgoing FAIL before is is added to the
|
||||
// in-memory commitment state of the link.
|
||||
FailOutgoing
|
||||
|
||||
// Commit drops all HTLC after any outgoing circuits have been
|
||||
// opened, but before the in-memory commitment state is persisted.
|
||||
Commit
|
||||
)
|
||||
|
||||
// String returns a human-readable identifier for a given Flag.
|
||||
func (f Flag) String() string {
|
||||
switch f {
|
||||
case ExitSettle:
|
||||
return "ExitSettle"
|
||||
case AddIncoming:
|
||||
return "AddIncoming"
|
||||
case SettleIncoming:
|
||||
return "SettleIncoming"
|
||||
case FailIncoming:
|
||||
return "FailIncoming"
|
||||
case AddOutgoing:
|
||||
return "AddOutgoing"
|
||||
case SettleOutgoing:
|
||||
return "SettleOutgoing"
|
||||
case FailOutgoing:
|
||||
return "FailOutgoing"
|
||||
case Commit:
|
||||
return "Commit"
|
||||
default:
|
||||
return "UnknownHodlFlag"
|
||||
}
|
||||
}
|
||||
|
||||
// Warning generates a warning message to log if a particular breakpoint is
|
||||
// triggered during execution.
|
||||
func (f Flag) Warning() string {
|
||||
var msg string
|
||||
switch f {
|
||||
case ExitSettle:
|
||||
msg = "will not attempt to settle ADD with sender"
|
||||
case AddIncoming:
|
||||
msg = "will not attempt to forward ADD to switch"
|
||||
case SettleIncoming:
|
||||
msg = "will not attempt to forward SETTLE to switch"
|
||||
case FailIncoming:
|
||||
msg = "will not attempt to forward FAIL to switch"
|
||||
case AddOutgoing:
|
||||
msg = "will not update channel state with downstream ADD"
|
||||
case SettleOutgoing:
|
||||
msg = "will not update channel state with downstream SETTLE"
|
||||
case FailOutgoing:
|
||||
msg = "will not update channel state with downstream FAIL"
|
||||
case Commit:
|
||||
msg = "will not commit pending channel updates"
|
||||
default:
|
||||
msg = "incorrect hodl flag usage"
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s mode enabled -- %s", f, msg)
|
||||
}
|
||||
|
||||
// Mask returns the Mask consisting solely of this Flag.
|
||||
func (f Flag) Mask() Mask {
|
||||
return Mask(f)
|
||||
}
|
Loading…
Reference in New Issue
Block a user