erigon-pulse/cl/freezer/utils.go

37 lines
778 B
Go
Raw Normal View History

2023-06-04 23:52:55 +00:00
package freezer
import (
"bytes"
"fmt"
"github.com/ledgerwatch/erigon-lib/types/ssz"
"github.com/ledgerwatch/erigon/cl/utils"
)
2023-06-06 01:24:59 +00:00
type marshalerHashable interface {
ssz.Marshaler
ssz.HashableSSZ
}
func PutObjectSSZIntoFreezer(objectName, freezerNamespace string, numericalId uint64, object marshalerHashable, record Freezer) error {
2023-06-04 23:52:55 +00:00
if record == nil {
return nil
}
var buffer bytes.Buffer
encoded, err := object.EncodeSSZ(nil)
if err != nil {
return err
}
if _, err = buffer.Write(utils.CompressSnappy(encoded)); err != nil {
return err
}
id := fmt.Sprintf("%d", numericalId)
2023-06-06 01:24:59 +00:00
// put the hash of the object as the sidecar.
h, err := object.HashSSZ()
if err != nil {
return err
}
2023-06-04 23:52:55 +00:00
2023-06-06 01:24:59 +00:00
return record.Put(&buffer, h[:], freezerNamespace, objectName, id)
2023-06-04 23:52:55 +00:00
}