mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-01-19 05:45:21 +01:00
01ac713aec
In this commit, a minimal implementation of `Blockbeat` is added to synchronize block heights, which will be used in `ChainArb`, `Sweeper`, and `TxPublisher` so blocks are processed sequentially among them.
55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
package chainio
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/btcsuite/btclog/v2"
|
|
"github.com/lightningnetwork/lnd/chainntnfs"
|
|
)
|
|
|
|
// Beat implements the Blockbeat interface. It contains the block epoch and a
|
|
// customized logger.
|
|
//
|
|
// TODO(yy): extend this to check for confirmation status - which serves as the
|
|
// single source of truth, to avoid the potential race between receiving blocks
|
|
// and `GetTransactionDetails/RegisterSpendNtfn/RegisterConfirmationsNtfn`.
|
|
type Beat struct {
|
|
// epoch is the current block epoch the blockbeat is aware of.
|
|
epoch chainntnfs.BlockEpoch
|
|
|
|
// log is the customized logger for the blockbeat which prints the
|
|
// block height.
|
|
log btclog.Logger
|
|
}
|
|
|
|
// Compile-time check to ensure Beat satisfies the Blockbeat interface.
|
|
var _ Blockbeat = (*Beat)(nil)
|
|
|
|
// NewBeat creates a new beat with the specified block epoch and a customized
|
|
// logger.
|
|
func NewBeat(epoch chainntnfs.BlockEpoch) *Beat {
|
|
b := &Beat{
|
|
epoch: epoch,
|
|
}
|
|
|
|
// Create a customized logger for the blockbeat.
|
|
logPrefix := fmt.Sprintf("Height[%6d]:", b.Height())
|
|
b.log = clog.WithPrefix(logPrefix)
|
|
|
|
return b
|
|
}
|
|
|
|
// Height returns the height of the block epoch.
|
|
//
|
|
// NOTE: Part of the Blockbeat interface.
|
|
func (b *Beat) Height() int32 {
|
|
return b.epoch.Height
|
|
}
|
|
|
|
// logger returns the logger for the blockbeat.
|
|
//
|
|
// NOTE: Part of the private blockbeat interface.
|
|
func (b *Beat) logger() btclog.Logger {
|
|
return b.log
|
|
}
|