f71cc951fd
This commit resovles a lingering issue w/in the codebase wrt how the ChannelStatus flags are defined. Currently ChannelStatus is improperly used to define a bit field and the individual flags themselves. As a result, HasChanStatus accepts queries on particular status (combinations of flags) and individual flags themselves. This is an issue because the way HasChanStatus computes whether the channel has a particular status assumes the provided inputs are all flags (or at least combinations of flags). However, ChanStatusDefault is simply the absence of any other flag. Hence, HasChanStatus will always return true when querying for ChanStatusDefault because status&0 == 0 is always true. Longer term we should should consider splitting these definitions into flags and particular states, and change the way construct or operate on them, but for now I've just special-cased this one value. Fortunately, we don't query HasChannelStatus w/ ChanStatusDefault anywhere in the codebase so we dodge a bullet here, but it'd be nice to have some greater assurances moving forward. |
||
---|---|---|
.. | ||
kvdb | ||
migration_01_to_11 | ||
migration12 | ||
migration13 | ||
migtest | ||
addr_test.go | ||
addr.go | ||
channel_cache_test.go | ||
channel_cache.go | ||
channel_test.go | ||
channel.go | ||
codec.go | ||
db_test.go | ||
db.go | ||
doc.go | ||
duplicate_payments.go | ||
error.go | ||
fees.go | ||
forwarding_log_test.go | ||
forwarding_log.go | ||
forwarding_package_test.go | ||
forwarding_package.go | ||
graph_test.go | ||
graph.go | ||
invoice_test.go | ||
invoices.go | ||
legacy_serialization.go | ||
log.go | ||
meta_test.go | ||
meta.go | ||
mp_payment.go | ||
nodes_test.go | ||
nodes.go | ||
options.go | ||
payment_control_test.go | ||
payment_control.go | ||
payments_test.go | ||
payments.go | ||
README.md | ||
reject_cache_test.go | ||
reject_cache.go | ||
waitingproof_test.go | ||
waitingproof.go | ||
witness_cache_test.go | ||
witness_cache.go |
channeldb
The channeldb implements the persistent storage engine for lnd
and
generically a data storage layer for the required state within the Lightning
Network. The backing storage engine is
boltdb, an embedded pure-go key-value store
based off of LMDB.
The package implements an object-oriented storage model with queries and mutations flowing through a particular object instance rather than the database itself. The storage implemented by the objects includes: open channels, past commitment revocation states, the channel graph which includes authenticated node and channel announcements, outgoing payments, and invoices
Installation and Updating
$ go get -u github.com/lightningnetwork/lnd/channeldb