Skip to content

Commit

Permalink
feat(eventindexer): pacaya event updates (#18919)
Browse files Browse the repository at this point in the history
  • Loading branch information
cyberhorsey authored Feb 19, 2025
1 parent 05e43ab commit e44ee25
Show file tree
Hide file tree
Showing 22 changed files with 4,814 additions and 121 deletions.
3 changes: 0 additions & 3 deletions packages/eventindexer/.golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@
# "--config=${workspaceFolder}/.golangci.yml"
# ],

output:
formats: colored-line-number

linters:
enable:
- errcheck
Expand Down
7 changes: 7 additions & 0 deletions packages/eventindexer/cmd/flags/indexer.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,13 @@ var (
Category: indexerCategory,
EnvVars: []string{"ONTAKE_FORK_HEIGHT"},
}
PacayaForkHeight = &cli.Uint64Flag{
Name: "pacayaForkHeight",
Usage: "Block number pacaya fork height happened",
Value: 91134698,
Category: indexerCategory,
EnvVars: []string{"PACAYA_FORK_HEIGHT"},
}
)

var IndexerFlags = MergeFlags(CommonFlags, []cli.Flag{
Expand Down
3,925 changes: 3,925 additions & 0 deletions packages/eventindexer/contracts/pacaya/taikoinbox/TaikoInbox.go

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions packages/eventindexer/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ var (
EventNameTransitionProved = "TransitionProved"
EventNameTransitionContested = "TransitionContested"
EventNameBlockProposed = "BlockProposed"
EventNameBatchProposed = "BatchProposed"
EventNameBatchesProven = "BatchesProved"
EventNameBatchesVerified = "BatchesVerified"
EventNameBlockAssigned = "BlockAssigned"
EventNameBlockVerified = "BlockVerified"
EventNameMessageSent = "MessageSent"
Expand Down Expand Up @@ -47,6 +50,8 @@ type Event struct {
TransactedAt time.Time `json:"transactedAt"`
Tier sql.NullInt16 `json:"tier"`
EmittedBlockID uint64 `json:"emittedBlockID"`
NumBlocks sql.NullInt64 `json:"numBlocks"`
BatchID sql.NullInt64 `json:"batchID"`
}

// SaveEventOpts
Expand All @@ -68,6 +73,8 @@ type SaveEventOpts struct {
TransactedAt time.Time
Tier *uint16
EmittedBlockID uint64
NumBlocks *int64
BatchID *int64
}

type UniqueProversResponse struct {
Expand Down
2 changes: 2 additions & 0 deletions packages/eventindexer/indexer/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ type Config struct {
IndexERC20s bool
Layer string
OntakeForkHeight uint64
PacayaForkHeight uint64
OpenDBFunc func() (db.DB, error)
}

Expand All @@ -57,6 +58,7 @@ func NewConfigFromCliContext(c *cli.Context) (*Config, error) {
IndexERC20s: c.Bool(flags.IndexERC20s.Name),
Layer: c.String(flags.Layer.Name),
OntakeForkHeight: c.Uint64(flags.OntakeForkHeight.Name),
PacayaForkHeight: c.Uint64(flags.PacayaForkHeight.Name),
OpenDBFunc: func() (db.DB, error) {
return db.OpenDBConnection(db.DBConnectionOpts{
Name: c.String(flags.DatabaseUsername.Name),
Expand Down
131 changes: 24 additions & 107 deletions packages/eventindexer/indexer/filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,110 +123,6 @@ func filterFunc(
return nil
}

func filterFuncOntake(
ctx context.Context,
chainID *big.Int,
i *Indexer,
filterOpts *bind.FilterOpts,
) error {
wg, ctx := errgroup.WithContext(ctx)

if i.taikol1 != nil {
wg.Go(func() error {
transitionProvedEvents, err := i.taikol1.FilterTransitionProvedV2(filterOpts, nil)
if err != nil {
return errors.Wrap(err, "i.taikol1.FilterTransitionProved")
}

err = i.saveTransitionProvedEventsV2(ctx, chainID, transitionProvedEvents)
if err != nil {
return errors.Wrap(err, "i.saveTransitionProvedEvents")
}

return nil
})

wg.Go(func() error {
transitionContestedEvents, err := i.taikol1.FilterTransitionContestedV2(filterOpts, nil)
if err != nil {
return errors.Wrap(err, "i.taikol1.FilterTransitionContested")
}

err = i.saveTransitionContestedEventsV2(ctx, chainID, transitionContestedEvents)
if err != nil {
return errors.Wrap(err, "i.saveTransitionContestedEvents")
}

return nil
})

wg.Go(func() error {
blockProposedEvents, err := i.taikol1.FilterBlockProposedV2(filterOpts, nil)
if err != nil {
return errors.Wrap(err, "i.taikol1.FilterBlockProposed")
}

err = i.saveBlockProposedEventsV2(ctx, chainID, blockProposedEvents)
if err != nil {
return errors.Wrap(err, "i.saveBlockProposedEvents")
}

return nil
})

wg.Go(func() error {
blockVerifiedEvents, err := i.taikol1.FilterBlockVerifiedV2(filterOpts, nil, nil)
if err != nil {
return errors.Wrap(err, "i.taikol1.FilterBlockVerified")
}

err = i.saveBlockVerifiedEventsV2(ctx, chainID, blockVerifiedEvents)
if err != nil {
return errors.Wrap(err, "i.saveBlockVerifiedEvents")
}

return nil
})
}

if i.bridge != nil {
wg.Go(func() error {
messagesSent, err := i.bridge.FilterMessageSent(filterOpts, nil)
if err != nil {
return errors.Wrap(err, "i.bridge.FilterMessageSent")
}

err = i.saveMessageSentEvents(ctx, chainID, messagesSent)
if err != nil {
return errors.Wrap(err, "i.saveMessageSentEvents")
}

return nil
})
}

wg.Go(func() error {
if err := i.indexRawBlockData(ctx, chainID, filterOpts.Start, *filterOpts.End); err != nil {
return errors.Wrap(err, "i.indexRawBlockData")
}

return nil
})

err := wg.Wait()

if err != nil {
if errors.Is(err, context.Canceled) {
slog.Error("filter context cancelled")
return err
}

return err
}

return nil
}

func (i *Indexer) filter(
ctx context.Context,
) error {
Expand All @@ -245,6 +141,10 @@ func (i *Indexer) filter(
i.isPostOntakeForkHeightReached = true
}

if i.latestIndexedBlockNumber >= i.pacayaForkHeight {
i.isPostPacayaForkHeightReached = true
}

for j := i.latestIndexedBlockNumber + 1; j <= endBlockID; j += i.blockBatchSize {
end := j + i.blockBatchSize - 1

Expand All @@ -254,7 +154,21 @@ func (i *Indexer) filter(
end = endBlockID
}

if !i.isPostOntakeForkHeightReached && i.taikol1 != nil && i.ontakeForkHeight > i.latestIndexedBlockNumber && i.ontakeForkHeight < end {
if !i.isPostPacayaForkHeightReached && i.taikol1 != nil && i.pacayaForkHeight > i.latestIndexedBlockNumber && i.pacayaForkHeight < end {
slog.Info("pacaya fork height reached", "height", i.pacayaForkHeight)

i.isPostPacayaForkHeightReached = true

end = i.pacayaForkHeight - 1

slog.Info("setting end block ID to pacayaForkheight - 1",
"latestIndexedBlockNumber",
i.latestIndexedBlockNumber,
"pacayaForkHeight", i.pacayaForkHeight,
"endBlockID", end,
"isPostPacayaForkHeightReached", i.isPostPacayaForkHeightReached,
)
} else if !i.isPostOntakeForkHeightReached && i.taikol1 != nil && i.ontakeForkHeight > i.latestIndexedBlockNumber && i.ontakeForkHeight < end {
slog.Info("ontake fork height reached", "height", i.ontakeForkHeight)

i.isPostOntakeForkHeightReached = true
Expand All @@ -280,9 +194,12 @@ func (i *Indexer) filter(

var filter FilterFunc

if i.isPostOntakeForkHeightReached {
switch {
case i.isPostPacayaForkHeightReached:
filter = filterFuncPacaya
case i.isPostOntakeForkHeightReached:
filter = filterFuncOntake
} else {
default:
filter = filterFunc
}

Expand Down
115 changes: 115 additions & 0 deletions packages/eventindexer/indexer/filter_ontake.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package indexer

import (
"context"
"log/slog"
"math/big"

"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/pkg/errors"
"golang.org/x/sync/errgroup"
)

func filterFuncOntake(
ctx context.Context,
chainID *big.Int,
i *Indexer,
filterOpts *bind.FilterOpts,
) error {
wg, ctx := errgroup.WithContext(ctx)

if i.taikol1 != nil {
wg.Go(func() error {
transitionProvedEvents, err := i.taikol1.FilterTransitionProvedV2(filterOpts, nil)
if err != nil {
return errors.Wrap(err, "i.taikol1.FilterTransitionProved")
}

err = i.saveTransitionProvedEventsV2(ctx, chainID, transitionProvedEvents)
if err != nil {
return errors.Wrap(err, "i.saveTransitionProvedEvents")
}

return nil
})

wg.Go(func() error {
transitionContestedEvents, err := i.taikol1.FilterTransitionContestedV2(filterOpts, nil)
if err != nil {
return errors.Wrap(err, "i.taikol1.FilterTransitionContested")
}

err = i.saveTransitionContestedEventsV2(ctx, chainID, transitionContestedEvents)
if err != nil {
return errors.Wrap(err, "i.saveTransitionContestedEvents")
}

return nil
})

wg.Go(func() error {
blockProposedEvents, err := i.taikol1.FilterBlockProposedV2(filterOpts, nil)
if err != nil {
return errors.Wrap(err, "i.taikol1.FilterBlockProposed")
}

err = i.saveBlockProposedEventsV2(ctx, chainID, blockProposedEvents)
if err != nil {
return errors.Wrap(err, "i.saveBlockProposedEvents")
}

return nil
})

wg.Go(func() error {
blockVerifiedEvents, err := i.taikol1.FilterBlockVerifiedV2(filterOpts, nil, nil)
if err != nil {
return errors.Wrap(err, "i.taikol1.FilterBlockVerified")
}

err = i.saveBlockVerifiedEventsV2(ctx, chainID, blockVerifiedEvents)
if err != nil {
return errors.Wrap(err, "i.saveBlockVerifiedEvents")
}

return nil
})
}

if i.bridge != nil {
wg.Go(func() error {
messagesSent, err := i.bridge.FilterMessageSent(filterOpts, nil)
if err != nil {
return errors.Wrap(err, "i.bridge.FilterMessageSent")
}

err = i.saveMessageSentEvents(ctx, chainID, messagesSent)
if err != nil {
return errors.Wrap(err, "i.saveMessageSentEvents")
}

return nil
})
}

wg.Go(func() error {
if err := i.indexRawBlockData(ctx, chainID, filterOpts.Start, *filterOpts.End); err != nil {
return errors.Wrap(err, "i.indexRawBlockData")
}

return nil
})

err := wg.Wait()

if err != nil {
if errors.Is(err, context.Canceled) {
slog.Error("filter context cancelled")
return err
}

return err
}

return nil
}
Loading

0 comments on commit e44ee25

Please sign in to comment.