github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/swarm/storage/database.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 // 10 // 11 // 12 // 13 // 14 // 15 // 16 // 17 // 18 // 19 // 20 // 21 // 22 // 23 // 24 25 package storage 26 27 // 28 // 29 30 import ( 31 "fmt" 32 33 "github.com/ethereum/go-ethereum/metrics" 34 "github.com/syndtr/goleveldb/leveldb" 35 "github.com/syndtr/goleveldb/leveldb/iterator" 36 "github.com/syndtr/goleveldb/leveldb/opt" 37 ) 38 39 const openFileLimit = 128 40 41 type LDBDatabase struct { 42 db *leveldb.DB 43 } 44 45 func NewLDBDatabase(file string) (*LDBDatabase, error) { 46 // 47 db, err := leveldb.OpenFile(file, &opt.Options{OpenFilesCacheCapacity: openFileLimit}) 48 if err != nil { 49 return nil, err 50 } 51 52 database := &LDBDatabase{db: db} 53 54 return database, nil 55 } 56 57 func (db *LDBDatabase) Put(key []byte, value []byte) { 58 metrics.GetOrRegisterCounter("ldbdatabase.put", nil).Inc(1) 59 60 err := db.db.Put(key, value, nil) 61 if err != nil { 62 fmt.Println("Error put", err) 63 } 64 } 65 66 func (db *LDBDatabase) Get(key []byte) ([]byte, error) { 67 metrics.GetOrRegisterCounter("ldbdatabase.get", nil).Inc(1) 68 69 dat, err := db.db.Get(key, nil) 70 if err != nil { 71 return nil, err 72 } 73 return dat, nil 74 } 75 76 func (db *LDBDatabase) Delete(key []byte) error { 77 return db.db.Delete(key, nil) 78 } 79 80 func (db *LDBDatabase) LastKnownTD() []byte { 81 data, _ := db.Get([]byte("LTD")) 82 83 if len(data) == 0 { 84 data = []byte{0x0} 85 } 86 87 return data 88 } 89 90 func (db *LDBDatabase) NewIterator() iterator.Iterator { 91 metrics.GetOrRegisterCounter("ldbdatabase.newiterator", nil).Inc(1) 92 93 return db.db.NewIterator(nil, nil) 94 } 95 96 func (db *LDBDatabase) Write(batch *leveldb.Batch) error { 97 metrics.GetOrRegisterCounter("ldbdatabase.write", nil).Inc(1) 98 99 return db.db.Write(batch, nil) 100 } 101 102 func (db *LDBDatabase) Close() { 103 // 104 db.db.Close() 105 }