178996f0d3
This commit changes the format used to store payments within the DB. Previously this was serialized as one continuous struct OutgoingPayment, which also contained an Invoice struct we where only using a few fields of. We now split it up into two simpler sub-structs CreationInfo, AttemptInfo and PaymentPreimage. We also want to associate the payments more closely with payment statuses, so we move to this hierarchy: There's one top-level bucket "sentPaymentsBucket" which contains a set of sub-buckets indexed by a payment's payment hash. Each such sub-bucket contains several fields: paymentStatusKey -> the payment's status paymentCreationInfoKey -> the payment's CreationInfo. paymentAttemptInfoKey -> the payment's AttemptInfo. paymentSettleInfoKey -> the payment's preimage (or zeroes for non-settled payments) The CreationInfo is information that is static during the whole payment lifcycle. The attempt info is set each time a new payment attempt (route+paymentID) is sent on the network. The preimage is information only known when a payment succeeds. It therefore makes sense to split them. We keep legacy serialization code for migration puproses. |
||
---|---|---|
.. | ||
addr_test.go | ||
addr.go | ||
channel_cache_test.go | ||
channel_cache.go | ||
channel_test.go | ||
channel.go | ||
codec.go | ||
control_tower_test.go | ||
control_tower.go | ||
db_test.go | ||
db.go | ||
doc.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 | ||
migrations_test.go | ||
migrations.go | ||
nodes_test.go | ||
nodes.go | ||
options.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