Skip to content

Commit

Permalink
Pass BasicProvider to ingestion Engine
Browse files Browse the repository at this point in the history
  • Loading branch information
m-Peter committed Oct 24, 2024
1 parent 07f2b27 commit 52cab4d
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 13 deletions.
44 changes: 31 additions & 13 deletions bootstrap/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,20 @@ import (
"github.com/onflow/flow-evm-gateway/services/traces"
"github.com/onflow/flow-evm-gateway/storage"
"github.com/onflow/flow-evm-gateway/storage/pebble"
"github.com/onflow/flow-go/fvm/evm"
evmTypes "github.com/onflow/flow-go/fvm/evm/types"

offchain "github.com/onflow/flow-go/fvm/evm/offchain/blocks"
)

type Storages struct {
Storage *pebble.Storage
Blocks storage.BlockIndexer
Transactions storage.TransactionIndexer
Receipts storage.ReceiptIndexer
Accounts storage.AccountIndexer
Traces storage.TraceIndexer
Storage *pebble.Storage
Blocks storage.BlockIndexer
BlockMetadata evmTypes.BackendStorage
Transactions storage.TransactionIndexer
Receipts storage.ReceiptIndexer
Accounts storage.AccountIndexer
Traces storage.TraceIndexer
}

type Publishers struct {
Expand Down Expand Up @@ -116,17 +121,29 @@ func (b *Bootstrap) StartEventIngestion(ctx context.Context) error {
Uint64("missed-heights", latestCadenceBlock.Height-latestCadenceHeight).
Msg("indexing cadence height information")

chainID := b.config.FlowNetworkID

// create event subscriber
subscriber := ingestion.NewRPCSubscriber(
b.client,
b.config.HeartbeatInterval,
b.config.FlowNetworkID,
chainID,
b.logger,
)

blockProvider, err := offchain.NewBasicProvider(
chainID,
b.storages.BlockMetadata,
evm.StorageAccountAddress(chainID),
)
if err != nil {
return fmt.Errorf("failed to create blocks BasicProvider")
}

// initialize event ingestion engine
b.events = ingestion.NewEventIngestionEngine(
subscriber,
blockProvider,
b.storages.Storage,
b.storages.Blocks,
b.storages.Receipts,
Expand Down Expand Up @@ -517,12 +534,13 @@ func setupStorage(
}

return &Storages{
Storage: store,
Blocks: blocks,
Transactions: pebble.NewTransactions(store),
Receipts: pebble.NewReceipts(store),
Accounts: pebble.NewAccounts(store),
Traces: pebble.NewTraces(store),
Storage: store,
Blocks: blocks,
BlockMetadata: pebble.NewBlockMetadata(store),
Transactions: pebble.NewTransactions(store),
Receipts: pebble.NewReceipts(store),
Accounts: pebble.NewAccounts(store),
Traces: pebble.NewTraces(store),
}, nil
}

Expand Down
5 changes: 5 additions & 0 deletions services/ingestion/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import (
"github.com/onflow/flow-evm-gateway/models"
"github.com/onflow/flow-evm-gateway/storage"
"github.com/onflow/flow-evm-gateway/storage/pebble"

offchain "github.com/onflow/flow-go/fvm/evm/offchain/blocks"
)

var _ models.Engine = &Engine{}
Expand All @@ -35,6 +37,7 @@ type Engine struct {
*models.EngineStatus

subscriber EventSubscriber
blockProvider *offchain.BasicProvider
store *pebble.Storage
blocks storage.BlockIndexer
receipts storage.ReceiptIndexer
Expand All @@ -49,6 +52,7 @@ type Engine struct {

func NewEventIngestionEngine(
subscriber EventSubscriber,
blockProvider *offchain.BasicProvider,
store *pebble.Storage,
blocks storage.BlockIndexer,
receipts storage.ReceiptIndexer,
Expand All @@ -65,6 +69,7 @@ func NewEventIngestionEngine(
EngineStatus: models.NewEngineStatus(),

subscriber: subscriber,
blockProvider: blockProvider,
store: store,
blocks: blocks,
receipts: receipts,
Expand Down
5 changes: 5 additions & 0 deletions services/ingestion/engine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ func TestSerialBlockIngestion(t *testing.T) {

engine := NewEventIngestionEngine(
subscriber,
nil,
store,
blocks,
receipts,
Expand Down Expand Up @@ -143,6 +144,7 @@ func TestSerialBlockIngestion(t *testing.T) {

engine := NewEventIngestionEngine(
subscriber,
nil,
store,
blocks,
receipts,
Expand Down Expand Up @@ -258,6 +260,7 @@ func TestBlockAndTransactionIngestion(t *testing.T) {

engine := NewEventIngestionEngine(
subscriber,
nil,
store,
blocks,
receipts,
Expand Down Expand Up @@ -361,6 +364,7 @@ func TestBlockAndTransactionIngestion(t *testing.T) {

engine := NewEventIngestionEngine(
subscriber,
nil,
store,
blocks,
receipts,
Expand Down Expand Up @@ -457,6 +461,7 @@ func TestBlockAndTransactionIngestion(t *testing.T) {

engine := NewEventIngestionEngine(
subscriber,
nil,
store,
blocks,
receipts,
Expand Down
6 changes: 6 additions & 0 deletions storage/pebble/block_metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ import (
"github.com/onflow/atree"

errs "github.com/onflow/flow-evm-gateway/models/errors"
evmTypes "github.com/onflow/flow-go/fvm/evm/types"
)

var _ atree.Ledger = &BlockMetadata{}
var _ evmTypes.BackendStorage = &BlockMetadata{}

type BlockMetadata struct {
store *Storage
Expand All @@ -31,6 +33,10 @@ func (l *BlockMetadata) GetValue(owner, key []byte) ([]byte, error) {
id := append(owner, key...)
val, err := l.store.get(bmValue, id)
if err != nil {
if errors.Is(err, errs.ErrEntityNotFound) {
return nil, nil
}

return nil, fmt.Errorf(
"failed to get block metadata value at owner %x and key %x: %w",
owner,
Expand Down

0 comments on commit 52cab4d

Please sign in to comment.