-
Notifications
You must be signed in to change notification settings - Fork 14
/
ledger_vote_history.go
65 lines (53 loc) · 1.44 KB
/
ledger_vote_history.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package ledger
import (
"github.com/qlcchain/go-qlc/common/storage"
"github.com/qlcchain/go-qlc/common/types"
)
type VoteStore interface {
AddVoteHistory(hash types.Hash, address types.Address) error
HasVoteHistory(hash types.Hash, address types.Address) bool
CleanBlockVoteHistory(hash types.Hash) error
CleanAllVoteHistory() error
}
func (l *Ledger) AddVoteHistory(hash types.Hash, address types.Address) error {
k, err := storage.GetKeyOfParts(storage.KeyPrefixVoteHistory, hash, address)
if err != nil {
return err
}
return l.store.Put(k, nil)
}
func (l *Ledger) HasVoteHistory(hash types.Hash, address types.Address) bool {
k, err := storage.GetKeyOfParts(storage.KeyPrefixVoteHistory, hash, address)
if err != nil {
return false
}
if b, _ := l.store.Has(k); b {
return true
} else {
return false
}
}
func (l *Ledger) CleanBlockVoteHistory(hash types.Hash) error {
k, err := storage.GetKeyOfParts(storage.KeyPrefixVoteHistory, hash)
if err != nil {
return err
}
err = l.store.Iterator(k, nil, func(key []byte, val []byte) error {
k := make([]byte, len(key))
copy(k[:], key)
return l.store.Delete(k)
})
return nil
}
func (l *Ledger) CleanAllVoteHistory() error {
k, err := storage.GetKeyOfParts(storage.KeyPrefixVoteHistory)
if err != nil {
return err
}
err = l.store.Iterator(k, nil, func(key []byte, val []byte) error {
k := make([]byte, len(key))
copy(k[:], key)
return l.store.Delete(k)
})
return nil
}