Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
c260e36
add basic eip7732 (epbs) support
pk910 Jan 27, 2025
32a348f
trigger CI
pk910 Jan 27, 2025
311e4af
bump go-eth2-client
pk910 Feb 5, 2025
c4fd40c
Merge branch 'master' into eip7732-support
pk910 Feb 5, 2025
3c911be
bump go-eth2-client
pk910 Feb 5, 2025
0167d8b
subscribe to execution_payload events & load execution payload envelopes
pk910 Feb 5, 2025
edd68ac
bump go-eth2-client
pk910 Feb 6, 2025
f820feb
epbs payload handling & db persistence
pk910 Feb 8, 2025
48ce452
Merge branch 'eip7732-support' into pk910/eip7732-workspace
pk910 Feb 8, 2025
30a4d6d
fix schema upgrade sql for sqlite
pk910 Feb 8, 2025
efb9454
various small fixes for epbs implementation
pk910 Feb 8, 2025
4cc1d38
fixes for epbs payload loading
pk910 Feb 9, 2025
804d4b8
fetch execution payloads and show execution payload status on UI
pk910 Feb 9, 2025
687d581
Merge pull request #234 from ethpandaops/pk910/eip7732-workspace
pk910 Feb 9, 2025
3c637f9
fix payload badges on knockout rendered startpage
pk910 Feb 11, 2025
6da622d
show payload header data on slot details page
pk910 Feb 11, 2025
4fe1f72
add payload_status & remove has_payload to allow additional payload s…
pk910 Feb 12, 2025
c0030e4
Merge branch 'master' into eip7732-support
pk910 Feb 17, 2025
241771c
fix missing getters for eip7732 states
pk910 Feb 17, 2025
8384b64
Merge branch 'master' into eip7732-support
pk910 Mar 17, 2025
5dd85e4
Merge branch 'master' into eip7732-support
pk910 Mar 19, 2025
e09f649
Merge branch 'master' into eip7732-support
pk910 Apr 4, 2025
70c93b5
Merge branch 'master' into eip7732-support
pk910 Apr 4, 2025
7eeff90
Merge branch 'master' into eip7732-support
pk910 Apr 7, 2025
0380f13
save execution payload to block store
pk910 Apr 7, 2025
889db43
Merge branch 'master' into eip7732-support
barnabasbusa Apr 8, 2025
93a0089
Merge branch 'master' into eip7732-support
pk910 Apr 24, 2025
82a87f4
Merge branch 'master' into eip7732-support
pk910 Jul 15, 2025
499ef5a
fix merge issue with blob kzg blob kzg commitments
pk910 Jul 15, 2025
eef1a3d
add missing block helpers for eip7732
pk910 Jul 15, 2025
6010458
add gloas fork badge and internal getters
pk910 Sep 22, 2025
3556da8
Merge branch 'eip7732-support' into gloas-support
pk910 Sep 22, 2025
e35dc1a
fix merge conflicts
pk910 Sep 22, 2025
b4982ae
trigger CI
pk910 Sep 22, 2025
4628726
Merge branch 'master' into gloas-support
pk910 Dec 15, 2025
ba8a5d4
Merge branch 'master' into gloas-support
pk910 Jan 8, 2026
dce1653
bump `go-eth2-client`
pk910 Jan 8, 2026
121c977
rename epbs db migration
pk910 Jan 8, 2026
45d7f48
index & show block bids
pk910 Jan 9, 2026
b1d5cc5
rework blockdb to serve as long term tired bal/payload store
pk910 Jan 14, 2026
129e643
Merge branch 'master' into gloas-support
pk910 Jan 15, 2026
1ba48fd
index & display builders
pk910 Jan 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 67 additions & 8 deletions blockdb/blockdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,24 @@ package blockdb
import (
"context"

"github.com/sirupsen/logrus"

"github.com/ethpandaops/dora/blockdb/pebble"
"github.com/ethpandaops/dora/blockdb/s3"
"github.com/ethpandaops/dora/blockdb/tiered"
"github.com/ethpandaops/dora/blockdb/types"
dtypes "github.com/ethpandaops/dora/types"
)

// BlockDb is the main wrapper for block database operations.
type BlockDb struct {
engine types.BlockDbEngine
}

// GlobalBlockDb is the global block database instance.
var GlobalBlockDb *BlockDb

// InitWithPebble initializes the block database with Pebble (local) storage.
func InitWithPebble(config dtypes.PebbleBlockDBConfig) error {
engine, err := pebble.NewPebbleEngine(config)
if err != nil {
Expand All @@ -28,6 +34,7 @@ func InitWithPebble(config dtypes.PebbleBlockDBConfig) error {
return nil
}

// InitWithS3 initializes the block database with S3 (remote) storage.
func InitWithS3(config dtypes.S3BlockDBConfig) error {
engine, err := s3.NewS3Engine(config)
if err != nil {
Expand All @@ -41,25 +48,77 @@ func InitWithS3(config dtypes.S3BlockDBConfig) error {
return nil
}

// InitWithTiered initializes the block database with tiered storage (Pebble cache + S3 backend).
func InitWithTiered(config dtypes.TieredBlockDBConfig, logger logrus.FieldLogger) error {
engine, err := tiered.NewTieredEngine(config, logger)
if err != nil {
return err
}

GlobalBlockDb = &BlockDb{
engine: engine,
}

return nil
}

// Close closes the block database.
func (db *BlockDb) Close() error {
return db.engine.Close()
}

func (db *BlockDb) GetBlock(ctx context.Context, slot uint64, root []byte, parseBlock func(uint64, []byte) (interface{}, error)) (*types.BlockData, error) {
return db.engine.GetBlock(ctx, slot, root, parseBlock)
// GetBlock retrieves block data with selective loading based on flags.
func (db *BlockDb) GetBlock(
ctx context.Context,
slot uint64,
root []byte,
flags types.BlockDataFlags,
parseBlock func(uint64, []byte) (any, error),
parsePayload func(uint64, []byte) (any, error),
) (*types.BlockData, error) {
return db.engine.GetBlock(ctx, slot, root, flags, parseBlock, parsePayload)
}

// GetStoredComponents returns which components exist for a block.
func (db *BlockDb) GetStoredComponents(ctx context.Context, slot uint64, root []byte) (types.BlockDataFlags, error) {
return db.engine.GetStoredComponents(ctx, slot, root)
}

func (db *BlockDb) AddBlock(ctx context.Context, slot uint64, root []byte, header_ver uint64, header_data []byte, body_ver uint64, body_data []byte) (bool, error) {
// AddBlock stores block data. Returns (added, updated, error).
func (db *BlockDb) AddBlock(
ctx context.Context,
slot uint64,
root []byte,
headerVer uint64,
headerData []byte,
bodyVer uint64,
bodyData []byte,
payloadVer uint64,
payloadData []byte,
balVer uint64,
balData []byte,
) (bool, bool, error) {
return db.engine.AddBlock(ctx, slot, root, func() (*types.BlockData, error) {
return &types.BlockData{
HeaderVersion: header_ver,
HeaderData: header_data,
BodyVersion: body_ver,
BodyData: body_data,
HeaderVersion: headerVer,
HeaderData: headerData,
BodyVersion: bodyVer,
BodyData: bodyData,
PayloadVersion: payloadVer,
PayloadData: payloadData,
BalVersion: balVer,
BalData: balData,
}, nil
})
}

func (db *BlockDb) AddBlockWithCallback(ctx context.Context, slot uint64, root []byte, dataCb func() (*types.BlockData, error)) (bool, error) {
// AddBlockWithCallback stores block data using a callback for deferred data loading.
// Returns (added, updated, error).
func (db *BlockDb) AddBlockWithCallback(
ctx context.Context,
slot uint64,
root []byte,
dataCb func() (*types.BlockData, error),
) (bool, bool, error) {
return db.engine.AddBlock(ctx, slot, root, dataCb)
}
Loading
Loading