fix: only check for chain reorg if current block has hash (#56)

* fix: only check for chain reorg if current block has hash

* fix: remove starting block hash

* fix: don't use starting block hash
This commit is contained in:
gazenw
2024-10-05 01:35:04 +07:00
committed by GitHub
parent f9c6ef8dfd
commit 754fd1e997
3 changed files with 5 additions and 8 deletions

View File

@@ -6,6 +6,7 @@ import (
"sync" "sync"
"time" "time"
"github.com/btcsuite/btcd/chaincfg/chainhash"
"github.com/cockroachdb/errors" "github.com/cockroachdb/errors"
"github.com/gaze-network/indexer-network/common/errs" "github.com/gaze-network/indexer-network/common/errs"
"github.com/gaze-network/indexer-network/core/datasources" "github.com/gaze-network/indexer-network/core/datasources"
@@ -142,7 +143,7 @@ func (i *Indexer[T]) process(ctx context.Context) (err error) {
// validate reorg from first input // validate reorg from first input
{ {
remoteBlockHeader := firstInputHeader remoteBlockHeader := firstInputHeader
if !remoteBlockHeader.PrevBlock.IsEqual(&i.currentBlock.Hash) { if i.currentBlock.Hash != (chainhash.Hash{}) && !remoteBlockHeader.PrevBlock.IsEqual(&i.currentBlock.Hash) {
logger.WarnContext(ctx, "Detected chain reorganization. Searching for fork point...", logger.WarnContext(ctx, "Detected chain reorganization. Searching for fork point...",
slogx.String("event", "reorg_detected"), slogx.String("event", "reorg_detected"),
slogx.Stringer("current_hash", i.currentBlock.Hash), slogx.Stringer("current_hash", i.currentBlock.Hash),
@@ -215,7 +216,7 @@ func (i *Indexer[T]) process(ctx context.Context) (err error) {
return errors.Wrapf(errs.InternalError, "input is not continuous, input[%d] height: %d, input[%d] height: %d", i-1, prevHeader.Height, i, header.Height) return errors.Wrapf(errs.InternalError, "input is not continuous, input[%d] height: %d, input[%d] height: %d", i-1, prevHeader.Height, i, header.Height)
} }
if !header.PrevBlock.IsEqual(&prevHeader.Hash) { if prevHeader.Hash != (chainhash.Hash{}) && !header.PrevBlock.IsEqual(&prevHeader.Hash) {
logger.WarnContext(ctx, "Chain Reorganization occurred in the middle of batch fetching inputs, need to try to fetch again") logger.WarnContext(ctx, "Chain Reorganization occurred in the middle of batch fetching inputs, need to try to fetch again")
// end current round // end current round

View File

@@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"time" "time"
"github.com/Cleverse/go-utilities/utils"
"github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/chaincfg/chainhash"
"github.com/gaze-network/indexer-network/common" "github.com/gaze-network/indexer-network/common"
"github.com/gaze-network/indexer-network/core/types" "github.com/gaze-network/indexer-network/core/types"
@@ -20,22 +19,19 @@ const (
EventHashVersion = 1 EventHashVersion = 1
) )
// starting block heights and hashes should be 1 block before activation block, as indexer will start from the block after this value
var StartingBlockHeader = map[common.Network]types.BlockHeader{ var StartingBlockHeader = map[common.Network]types.BlockHeader{
common.NetworkMainnet: { common.NetworkMainnet: {
Height: 839999, Height: 839999,
Hash: *utils.Must(chainhash.NewHashFromStr("0000000000000000000172014ba58d66455762add0512355ad651207918494ab")),
}, },
common.NetworkTestnet: { common.NetworkTestnet: {
Height: 2519999, Height: 2519999,
Hash: *utils.Must(chainhash.NewHashFromStr("000000000006f45c16402f05d9075db49d3571cf5273cf4cbeaa2aa295f7c833")),
}, },
common.NetworkFractalMainnet: { common.NetworkFractalMainnet: {
Height: 83999, Height: 83999,
Hash: *utils.Must(chainhash.NewHashFromStr("0000000000000000000000000000000000000000000000000000000000000000")), // TODO: Update this to match real hash
}, },
common.NetworkFractalTestnet: { common.NetworkFractalTestnet: {
Height: 83999, Height: 83999,
Hash: *utils.Must(chainhash.NewHashFromStr("00000000000000613ddfbdd1778b17cea3818febcbbf82762eafaa9461038343")),
}, },
} }

View File

@@ -691,7 +691,7 @@ func (p *Processor) flushBlock(ctx context.Context, blockHeader types.BlockHeade
if err != nil && errors.Is(err, errs.NotFound) && blockHeader.Height-1 == constants.StartingBlockHeader[p.network].Height { if err != nil && errors.Is(err, errs.NotFound) && blockHeader.Height-1 == constants.StartingBlockHeader[p.network].Height {
prevIndexedBlock = &entity.IndexedBlock{ prevIndexedBlock = &entity.IndexedBlock{
Height: constants.StartingBlockHeader[p.network].Height, Height: constants.StartingBlockHeader[p.network].Height,
Hash: constants.StartingBlockHeader[p.network].Hash, Hash: chainhash.Hash{},
EventHash: chainhash.Hash{}, EventHash: chainhash.Hash{},
CumulativeEventHash: chainhash.Hash{}, CumulativeEventHash: chainhash.Hash{},
} }