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) }