2023-06-04 23:52:55 +00:00
|
|
|
package freezer
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"fmt"
|
2023-10-21 23:17:18 +00:00
|
|
|
"github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy"
|
2023-06-04 23:52:55 +00:00
|
|
|
|
|
|
|
"github.com/ledgerwatch/erigon-lib/types/ssz"
|
|
|
|
)
|
|
|
|
|
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
|
|
|
|
}
|
2023-07-27 22:55:14 +00:00
|
|
|
buffer := new(bytes.Buffer)
|
|
|
|
if err := ssz_snappy.EncodeAndWrite(buffer, object); err != nil {
|
2023-06-04 23:52:55 +00:00
|
|
|
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-07-27 22:55:14 +00:00
|
|
|
return record.Put(buffer, h[:], freezerNamespace, objectName, id)
|
2023-06-04 23:52:55 +00:00
|
|
|
}
|