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  }