github.com/reapchain/go-reapchain@v0.2.15-0.20210609012950-9735c110c705/cmd/qman-new/database.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "strconv" 6 7 "github.com/ethereum/go-ethereum/common" 8 "github.com/ethereum/go-ethereum/ethdb" 9 "github.com/ethereum/go-ethereum/log" 10 ) 11 12 var ( 13 lastSeqPrefix = []byte("lastSeq-") 14 lastSetPrefix = []byte("lastSet-") 15 senatorPrefix = []byte("senator-") 16 candidatePrefix = []byte("candidate-") 17 ) 18 19 func ReadSenators(db ethdb.Database) []common.Address { 20 prefix := senatorPrefix 21 keylen := len(prefix) + len(common.Address{}) 22 it := db.(*ethdb.LDBDatabase).NewIterator() 23 defer it.Release() 24 25 var result []common.Address 26 27 it.Seek(prefix) 28 for bytes.HasPrefix(it.Key(), prefix) { 29 var addr common.Address 30 copy(addr[:], it.Key()[keylen-len(addr):]) 31 //value := it.Value() 32 result = append(result, addr) 33 it.Next() 34 } 35 return result 36 } 37 38 func ReadCandidates(db ethdb.Database) []common.Address { 39 prefix := candidatePrefix 40 keylen := len(prefix) + len(common.Address{}) 41 it := db.(*ethdb.LDBDatabase).NewIterator() 42 // it := db.NewIterator(prefix, nil) 43 defer it.Release() 44 45 var result []common.Address 46 47 it.Seek(prefix) 48 for bytes.HasPrefix(it.Key(), prefix) { 49 var addr common.Address 50 copy(addr[:], it.Key()[keylen-len(addr):]) 51 //value := it.Value() 52 result = append(result, addr) 53 it.Next() 54 } 55 return result 56 } 57 58 func WriteSenator(db ethdb.Database, addr common.Address, tag int) error { 59 key := append(senatorPrefix, addr[:]...) 60 err := db.Put(key, []byte(strconv.Itoa(tag))) 61 if err != nil { 62 log.Error("db write error", "err", err) 63 return err 64 } 65 return nil 66 } 67 68 func WriteCandidate(db ethdb.Database, addr common.Address, tag int) error { 69 key := append(candidatePrefix, addr[:]...) 70 err := db.Put(key, []byte(strconv.Itoa(tag))) 71 if err != nil { 72 log.Error("db write error", "err", err) 73 return err 74 } 75 return nil 76 } 77 78 func RemoveSenator(db ethdb.Database, addr common.Address) error { 79 key := append(senatorPrefix, addr[:]...) 80 err := db.Delete(key) 81 if err != nil { 82 log.Error("db delete error", "err", err) 83 return err 84 } 85 return nil 86 } 87 88 func RemoveCandidate(db ethdb.Database, addr common.Address) error { 89 key := append(candidatePrefix, addr[:]...) 90 err := db.Delete(key) 91 if err != nil { 92 log.Error("db delete error", "err", err) 93 return err 94 } 95 return nil 96 }