storage: put uint32 into keys using in big endianness

Which allows to iterate over the contents easily.
This commit is contained in:
Roman Khimov 2022-02-18 14:35:17 +03:00
parent 1ca918e631
commit 600da6909c
3 changed files with 6 additions and 21 deletions

View file

@ -46,7 +46,7 @@ import (
// Tuning parameters.
const (
headerBatchCount = 2000
version = "0.2.3"
version = "0.2.4"
defaultInitialGAS = 52000000_00000000
defaultGCPeriod = 10000

View file

@ -6,7 +6,6 @@ import (
"encoding/binary"
"errors"
iocore "io"
"sort"
"github.com/nspcc-dev/neo-go/pkg/core/block"
"github.com/nspcc-dev/neo-go/pkg/core/state"
@ -506,33 +505,19 @@ func (dao *Simple) GetStateSyncCurrentBlockHeight() (uint32, error) {
// GetHeaderHashes returns a sorted list of header hashes retrieved from
// the given underlying store.
func (dao *Simple) GetHeaderHashes() ([]util.Uint256, error) {
hashMap := make(map[uint32][]util.Uint256)
var hashes = make([]util.Uint256, 0)
dao.Store.Seek(storage.SeekRange{
Prefix: storage.IXHeaderHashList.Bytes(),
}, func(k, v []byte) bool {
storedCount := binary.LittleEndian.Uint32(k[1:])
hashes, err := read2000Uint256Hashes(v)
newHashes, err := read2000Uint256Hashes(v)
if err != nil {
panic(err)
}
hashMap[storedCount] = hashes
hashes = append(hashes, newHashes...)
return true
})
var (
hashes = make([]util.Uint256, 0, len(hashMap))
sortedKeys = make([]uint32, 0, len(hashMap))
)
for k := range hashMap {
sortedKeys = append(sortedKeys, k)
}
sort.Slice(sortedKeys, func(i, j int) bool { return sortedKeys[i] < sortedKeys[j] })
for _, key := range sortedKeys {
hashes = append(hashes[:key], hashMap[key]...)
}
return hashes, nil
}

View file

@ -125,7 +125,7 @@ func AppendPrefix(k KeyPrefix, b []byte) []byte {
// AppendPrefixInt(SYSCurrentHeader, 10001)
func AppendPrefixInt(k KeyPrefix, n int) []byte {
b := make([]byte, 4)
binary.LittleEndian.PutUint32(b, uint32(n))
binary.BigEndian.PutUint32(b, uint32(n))
return AppendPrefix(k, b)
}