mirror of
https://github.com/luxfi/coreth.git
synced 2026-10-30 17:00:51 +00:00
42 lines
1.3 KiB
Go
42 lines
1.3 KiB
Go
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package customrawdb
|
|
|
|
import (
|
|
"encoding/binary"
|
|
|
|
"github.com/luxfi/geth/common"
|
|
"github.com/luxfi/geth/ethdb"
|
|
log "github.com/luxfi/log"
|
|
)
|
|
|
|
var (
|
|
// bloomBitsPrefix + bit (uint16 big endian) + section (uint64 big endian) + hash -> bloom bits
|
|
bloomBitsPrefix = []byte("B")
|
|
)
|
|
|
|
// bloomBitsKey = bloomBitsPrefix + bit (uint16 big endian) + section (uint64 big endian) + hash
|
|
func bloomBitsKey(bit uint, section uint64, hash common.Hash) []byte {
|
|
key := append(append(bloomBitsPrefix, make([]byte, 10)...), hash.Bytes()...)
|
|
|
|
binary.BigEndian.PutUint16(key[1:], uint16(bit))
|
|
binary.BigEndian.PutUint64(key[3:], section)
|
|
|
|
return key
|
|
}
|
|
|
|
// ReadBloomBits retrieves the compressed bloom bit vector belonging to the given
|
|
// section and bit index from the database.
|
|
func ReadBloomBits(db ethdb.KeyValueReader, bit uint, section uint64, head common.Hash) ([]byte, error) {
|
|
return db.Get(bloomBitsKey(bit, section, head))
|
|
}
|
|
|
|
// WriteBloomBits stores the compressed bloom bits vector belonging to the given
|
|
// section and bit index.
|
|
func WriteBloomBits(db ethdb.KeyValueWriter, bit uint, section uint64, head common.Hash, bits []byte) {
|
|
if err := db.Put(bloomBitsKey(bit, section, head), bits); err != nil {
|
|
log.Crit("Failed to store bloom bits", "err", err)
|
|
}
|
|
}
|