chainio: implement Blockbeat
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.
This commit is contained in:
3 files changed
+98
-3
No files matched your search
@@ -0,0 +1,54 @@
|
||||
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
|
||||
}
|
||||
Reference in new issue
Block a user