mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2024-12-24 12:37:16 +00:00
43 lines
1.4 KiB
Go
43 lines
1.4 KiB
Go
package dbutils
|
|
|
|
import (
|
|
"encoding/binary"
|
|
|
|
"github.com/ledgerwatch/erigon/common"
|
|
)
|
|
|
|
func AccountIndexChunkKey(key []byte, blockNumber uint64) []byte {
|
|
blockNumBytes := make([]byte, common.AddressLength+8)
|
|
copy(blockNumBytes, key)
|
|
binary.BigEndian.PutUint64(blockNumBytes[common.AddressLength:], blockNumber)
|
|
|
|
return blockNumBytes
|
|
}
|
|
|
|
//
|
|
func StorageIndexChunkKey(key []byte, blockNumber uint64) []byte {
|
|
//remove incarnation and add block number
|
|
blockNumBytes := make([]byte, common.AddressLength+common.HashLength+8)
|
|
copy(blockNumBytes, key[:common.AddressLength])
|
|
copy(blockNumBytes[common.AddressLength:], key[common.AddressLength+common.IncarnationLength:])
|
|
binary.BigEndian.PutUint64(blockNumBytes[common.AddressLength+common.HashLength:], blockNumber)
|
|
|
|
return blockNumBytes
|
|
}
|
|
|
|
func CompositeKeyWithoutIncarnation(key []byte) []byte {
|
|
if len(key) == common.HashLength*2+common.IncarnationLength {
|
|
kk := make([]byte, common.HashLength*2)
|
|
copy(kk, key[:common.HashLength])
|
|
copy(kk[common.HashLength:], key[common.HashLength+common.IncarnationLength:])
|
|
return kk
|
|
}
|
|
if len(key) == common.AddressLength+common.HashLength+common.IncarnationLength {
|
|
kk := make([]byte, common.AddressLength+common.HashLength)
|
|
copy(kk, key[:common.AddressLength])
|
|
copy(kk[common.AddressLength:], key[common.AddressLength+common.IncarnationLength:])
|
|
return kk
|
|
}
|
|
return key
|
|
}
|