Skip to content
Merged
Changes from 4 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
1c9f2b5
Add wrapped_database.go
JonathanOppenheimer Sep 24, 2025
1082510
lint
JonathanOppenheimer Sep 24, 2025
b4cf02f
Apply suggestions from code review
JonathanOppenheimer Sep 24, 2025
04075c3
Rodrigo suggestions
JonathanOppenheimer Sep 24, 2025
76d4295
cleanup comments
JonathanOppenheimer Sep 24, 2025
7af3440
Merge branch 'master' into JonathanOppenheimer/uplift-database
JonathanOppenheimer Sep 25, 2025
13955ae
Merge branch 'master' into JonathanOppenheimer/uplift-database
JonathanOppenheimer Oct 1, 2025
5258cd6
Josh review
JonathanOppenheimer Oct 1, 2025
1c8cf95
dedouble implementation
JonathanOppenheimer Oct 1, 2025
c005a86
Merge branch 'master' into JonathanOppenheimer/uplift-database
JonathanOppenheimer Oct 10, 2025
1bda77f
rename type
JonathanOppenheimer Oct 10, 2025
99e6e6f
remove embed
JonathanOppenheimer Oct 10, 2025
2ba7b0e
Merge branch 'master' into JonathanOppenheimer/uplift-database
JonathanOppenheimer Oct 23, 2025
c47e2b7
remove unneeded functions
JonathanOppenheimer Oct 24, 2025
d9237b4
add basic test suite
JonathanOppenheimer Oct 24, 2025
0152bc1
rename to database
JonathanOppenheimer Oct 24, 2025
6fe651f
add test to ensure prod returns errors
JonathanOppenheimer Oct 24, 2025
daad661
use correct testdb
JonathanOppenheimer Oct 24, 2025
3ae6c29
lint
JonathanOppenheimer Oct 24, 2025
42e8b9a
Josh nits
JonathanOppenheimer Oct 24, 2025
dd3f00f
Update vms/evm/database/database_test.go
JonathanOppenheimer Oct 24, 2025
18038b5
nits
JonathanOppenheimer Oct 24, 2025
cb00b75
Merge branch 'master' into JonathanOppenheimer/uplift-database
JonathanOppenheimer Oct 24, 2025
dfd33c7
remove copy command
JonathanOppenheimer Oct 24, 2025
46fc003
Apply suggestions from code review
JonathanOppenheimer Oct 24, 2025
903aa1f
remove comment
JonathanOppenheimer Oct 24, 2025
7cde922
Update vms/evm/database/database_test.go
JonathanOppenheimer Oct 24, 2025
072975b
remove comment
JonathanOppenheimer Oct 24, 2025
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
71 changes: 71 additions & 0 deletions vms/evm/database/wrapped_database.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
// Copyright (C) 2019-2025, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.

package database

import (
"errors"

"github.com/ava-labs/libevm/ethdb"

"github.com/ava-labs/avalanchego/database"
)

var (
_ ethdb.Batch = (*ethBatchWrapper)(nil)
_ ethdb.KeyValueStore = (*ethDBWrapper)(nil)

ErrSnapshotNotSupported = errors.New("snapshot is not supported")
ErrStatNotSupported = errors.New("stat is not supported")
)

func WrapDatabase(db database.Database) ethdb.KeyValueStore { return ethDBWrapper{db} }

// ethDbWrapper implements ethdb.Database
type ethDBWrapper struct{ database.Database }

// Stat implements ethdb.Database
func (ethDBWrapper) Stat(string) (string, error) { return "", ErrStatNotSupported }

// NewBatch implements ethdb.Database
func (db ethDBWrapper) NewBatch() ethdb.Batch { return ethBatchWrapper{db.Database.NewBatch()} }

// NewBatchWithSize implements ethdb.Database
// TODO: propagate size through avalanchego Database interface
func (db ethDBWrapper) NewBatchWithSize(int) ethdb.Batch {
return ethBatchWrapper{db.Database.NewBatch()}
}

func (ethDBWrapper) NewSnapshot() (ethdb.Snapshot, error) {
return nil, ErrSnapshotNotSupported
}

// NewIterator implements ethdb.Database
//
// Note: This method assumes that the prefix is NOT part of the start, so there's
// no need for the caller to prepend the prefix to the start.
func (db ethDBWrapper) NewIterator(prefix []byte, start []byte) ethdb.Iterator {
// avalanchego's database implementation assumes that the prefix is part of the
// start, so it is added here (if it is provided).
if len(prefix) != 0 {
newStart := make([]byte, len(prefix)+len(start))
copy(newStart, prefix)
copy(newStart[len(prefix):], start)
start = newStart
}
return db.Database.NewIteratorWithStartAndPrefix(start, prefix)
}

// NewIteratorWithStart implements ethdb.Database
func (db ethDBWrapper) NewIteratorWithStart(start []byte) ethdb.Iterator {
return db.Database.NewIteratorWithStart(start)
}

// ethBatchWrapper implements ethdb.Batch
type ethBatchWrapper struct{ database.Batch }

// ValueSize implements ethdb.Batch
func (batch ethBatchWrapper) ValueSize() int { return batch.Batch.Size() }

// Replay implements ethdb.Batch
func (batch ethBatchWrapper) Replay(w ethdb.KeyValueWriter) error { return batch.Batch.Replay(w) }
Loading