mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-02-24 06:47:44 +01:00
In this commit, a small migration is added to the watchtower client DB to ensure that there is an entry in the towerID-to-sessionID index for all towers in the db regardless of if they have sessions or not. This is required as a follow up to migration 1 since that migration only created entries in the index for towers that had associated sessions which would lead to "tower not found" errors on start up.
37 lines
1.1 KiB
Go
37 lines
1.1 KiB
Go
package migration5
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"fmt"
|
|
)
|
|
|
|
// TowerID is a unique 64-bit identifier allocated to each unique watchtower.
|
|
// This allows the client to conserve on-disk space by not needing to always
|
|
// reference towers by their pubkey.
|
|
type TowerID uint64
|
|
|
|
// TowerIDFromBytes constructs a TowerID from the provided byte slice. The
|
|
// argument must have at least 8 bytes, and should contain the TowerID in
|
|
// big-endian byte order.
|
|
func TowerIDFromBytes(towerIDBytes []byte) (TowerID, error) {
|
|
if len(towerIDBytes) != 8 {
|
|
return 0, fmt.Errorf("not enough bytes in tower ID. "+
|
|
"Expected 8, got: %d", len(towerIDBytes))
|
|
}
|
|
|
|
return TowerID(byteOrder.Uint64(towerIDBytes)), nil
|
|
}
|
|
|
|
// Bytes encodes a TowerID into an 8-byte slice in big-endian byte order.
|
|
func (id TowerID) Bytes() []byte {
|
|
var buf [8]byte
|
|
binary.BigEndian.PutUint64(buf[:], uint64(id))
|
|
return buf[:]
|
|
}
|
|
|
|
// SessionIDSize is 33-bytes; it is a serialized, compressed public key.
|
|
const SessionIDSize = 33
|
|
|
|
// SessionID is created from the remote public key of a client, and serves as a
|
|
// unique identifier and authentication for sending state updates.
|
|
type SessionID [SessionIDSize]byte
|