gitlab.com/flarenetwork/coreth@v0.1.1/plugin/evm/database.go (about) 1 // (c) 2019-2020, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package evm 5 6 import ( 7 "errors" 8 9 "github.com/ethereum/go-ethereum/ethdb" 10 11 "github.com/ava-labs/avalanchego/database" 12 ) 13 14 var ( 15 errOpNotSupported = errors.New("this operation is not supported") 16 ) 17 18 // Database implements ethdb.Database 19 type Database struct{ database.Database } 20 21 // HasAncient returns an error as we don't have a backing chain freezer. 22 func (db Database) HasAncient(kind string, number uint64) (bool, error) { 23 return false, errOpNotSupported 24 } 25 26 // Ancient returns an error as we don't have a backing chain freezer. 27 func (db Database) Ancient(kind string, number uint64) ([]byte, error) { return nil, errOpNotSupported } 28 29 // Ancients returns an error as we don't have a backing chain freezer. 30 func (db Database) Ancients() (uint64, error) { return 0, errOpNotSupported } 31 32 // AncientSize returns an error as we don't have a backing chain freezer. 33 func (db Database) AncientSize(kind string) (uint64, error) { return 0, errOpNotSupported } 34 35 // AppendAncient returns an error as we don't have a backing chain freezer. 36 func (db Database) AppendAncient(number uint64, hash, header, body, receipts, td []byte) error { 37 return errOpNotSupported 38 } 39 40 // TruncateAncients returns an error as we don't have a backing chain freezer. 41 func (db Database) TruncateAncients(items uint64) error { return errOpNotSupported } 42 43 // Sync returns an error as we don't have a backing chain freezer. 44 func (db Database) Sync() error { return errOpNotSupported } 45 46 // NewBatch implements ethdb.Database 47 func (db Database) NewBatch() ethdb.Batch { return Batch{db.Database.NewBatch()} } 48 49 // NewIterator implements ethdb.Database 50 // 51 // Note: This method assumes that the prefix is NOT part of the start, so there's 52 // no need for the caller to prepend the prefix to the start. 53 func (db Database) NewIterator(prefix []byte, start []byte) ethdb.Iterator { 54 // avalanchego's database implementation assumes that the prefix is part of the 55 // start, so it is added here (if it is provided). 56 if len(prefix) > 0 { 57 newStart := make([]byte, len(prefix)+len(start)) 58 copy(newStart, prefix) 59 copy(newStart[len(prefix):], start) 60 start = newStart 61 } 62 return db.Database.NewIteratorWithStartAndPrefix(start, prefix) 63 } 64 65 // NewIteratorWithStart implements ethdb.Database 66 func (db Database) NewIteratorWithStart(start []byte) ethdb.Iterator { 67 return db.Database.NewIteratorWithStart(start) 68 } 69 70 // Batch implements ethdb.Batch 71 type Batch struct{ database.Batch } 72 73 // ValueSize implements ethdb.Batch 74 func (batch Batch) ValueSize() int { return batch.Batch.Size() } 75 76 // Replay implements ethdb.Batch 77 func (batch Batch) Replay(w ethdb.KeyValueWriter) error { return batch.Batch.Replay(w) }