database.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package ethdb
  2. import (
  3. "fmt"
  4. "github.com/ethereum/eth-go/ethutil"
  5. "github.com/syndtr/goleveldb/leveldb"
  6. "path"
  7. )
  8. type LDBDatabase struct {
  9. db *leveldb.DB
  10. }
  11. func NewLDBDatabase() (*LDBDatabase, error) {
  12. dbPath := path.Join(ethutil.Config.ExecPath, "database")
  13. // Open the db
  14. db, err := leveldb.OpenFile(dbPath, nil)
  15. if err != nil {
  16. return nil, err
  17. }
  18. database := &LDBDatabase{db: db}
  19. return database, nil
  20. }
  21. func (db *LDBDatabase) Put(key []byte, value []byte) {
  22. err := db.db.Put(key, value, nil)
  23. if err != nil {
  24. fmt.Println("Error put", err)
  25. }
  26. }
  27. func (db *LDBDatabase) Get(key []byte) ([]byte, error) {
  28. return db.db.Get(key, nil)
  29. }
  30. func (db *LDBDatabase) LastKnownTD() []byte {
  31. data, _ := db.db.Get([]byte("LastKnownTotalDifficulty"), nil)
  32. if len(data) == 0 {
  33. data = []byte{0x0}
  34. }
  35. return data
  36. }
  37. func (db *LDBDatabase) Close() {
  38. // Close the leveldb database
  39. db.db.Close()
  40. }
  41. func (db *LDBDatabase) Print() {
  42. iter := db.db.NewIterator(nil)
  43. for iter.Next() {
  44. key := iter.Key()
  45. value := iter.Value()
  46. fmt.Printf("%x(%d): ", key, len(key))
  47. node := ethutil.NewValueFromBytes(value)
  48. fmt.Printf("%v\n", node)
  49. }
  50. }