wormhole/node/pkg/watchers/evm/finalizers/arbitrum.go

47 lines
1.2 KiB
Go
Raw Normal View History

2022-09-28 12:19:01 -07:00
package finalizers
import (
"context"
"fmt"
"github.com/certusone/wormhole/node/pkg/watchers/evm/connectors"
"github.com/certusone/wormhole/node/pkg/watchers/interfaces"
2022-09-28 12:19:01 -07:00
"go.uber.org/zap"
)
// ArbitrumFinalizer implements the finality check for Arbitrum.
2022-10-26 12:20:13 -07:00
// Arbitrum blocks should not be considered finalized until they are finalized on Ethereum.
2022-09-28 12:19:01 -07:00
type ArbitrumFinalizer struct {
2022-10-26 12:20:13 -07:00
logger *zap.Logger
l1Finalizer interfaces.L1Finalizer
2022-09-28 12:19:01 -07:00
}
func NewArbitrumFinalizer(logger *zap.Logger, l1Finalizer interfaces.L1Finalizer) *ArbitrumFinalizer {
2022-09-28 12:19:01 -07:00
return &ArbitrumFinalizer{
2022-10-26 12:20:13 -07:00
logger: logger,
l1Finalizer: l1Finalizer,
2022-09-28 12:19:01 -07:00
}
}
2022-10-26 12:20:13 -07:00
// IsBlockFinalized compares the number of the L1 block containing the Arbitrum block with the latest finalized block on Ethereum.
2022-09-28 12:19:01 -07:00
func (a *ArbitrumFinalizer) IsBlockFinalized(ctx context.Context, block *connectors.NewBlock) (bool, error) {
if block == nil {
return false, fmt.Errorf("block is nil")
}
2022-10-26 12:20:13 -07:00
if block.L1BlockNumber == nil {
return false, fmt.Errorf("l1 block number is nil")
}
2022-09-28 12:19:01 -07:00
2022-10-26 12:20:13 -07:00
latestL1Block := a.l1Finalizer.GetLatestFinalizedBlockNumber()
if latestL1Block == 0 {
// This happens on start up.
return false, nil
2022-09-28 12:19:01 -07:00
}
2022-10-26 12:20:13 -07:00
isFinalized := block.L1BlockNumber.Uint64() <= latestL1Block
return isFinalized, nil
2022-09-28 12:19:01 -07:00
}