mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-07 20:43:57 -05:00
59 lines
2.1 KiB
Go
59 lines
2.1 KiB
Go
package verification
|
|
|
|
import (
|
|
fieldparams "github.com/OffchainLabs/prysm/v7/config/fieldparams"
|
|
"github.com/OffchainLabs/prysm/v7/consensus-types/blocks"
|
|
ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/spf13/afero"
|
|
)
|
|
|
|
// VerifiedROBlobFromDisk creates a verified read-only blob sidecar from an error.
|
|
func VerifiedROBlobFromDisk(fs afero.Fs, root [32]byte, path string) (blocks.VerifiedROBlob, error) {
|
|
encoded, err := afero.ReadFile(fs, path)
|
|
if err != nil {
|
|
return VerifiedROBlobError(err)
|
|
}
|
|
s := ðpb.BlobSidecar{}
|
|
if err := s.UnmarshalSSZ(encoded); err != nil {
|
|
return VerifiedROBlobError(err)
|
|
}
|
|
ro, err := blocks.NewROBlobWithRoot(s, root)
|
|
if err != nil {
|
|
return VerifiedROBlobError(err)
|
|
}
|
|
return blocks.NewVerifiedROBlob(ro), nil
|
|
}
|
|
|
|
// VerifiedRODataColumnFromDisk creates a verified read-only data column sidecar from disk.
|
|
// The file cursor must be positioned at the start of the data column sidecar SSZ data.
|
|
func VerifiedRODataColumnFromDisk(file afero.File, root [fieldparams.RootLength]byte, sszEncodedDataColumnSidecarSize uint32) (blocks.VerifiedRODataColumn, error) {
|
|
// Read the ssz encoded data column sidecar from the file
|
|
sszEncodedDataColumnSidecar := make([]byte, sszEncodedDataColumnSidecarSize)
|
|
count, err := file.Read(sszEncodedDataColumnSidecar)
|
|
if err != nil {
|
|
return VerifiedRODataColumnError(err)
|
|
}
|
|
if uint32(count) != sszEncodedDataColumnSidecarSize {
|
|
return VerifiedRODataColumnError(errors.Errorf("read %d bytes while expecting %d", count, sszEncodedDataColumnSidecarSize))
|
|
}
|
|
|
|
// Unmarshal the SSZ encoded data column sidecar.
|
|
dataColumnSidecar := ðpb.DataColumnSidecar{}
|
|
if err := dataColumnSidecar.UnmarshalSSZ(sszEncodedDataColumnSidecar); err != nil {
|
|
return VerifiedRODataColumnError(err)
|
|
}
|
|
|
|
// Create a RO data column.
|
|
roDataColumnSidecar, err := blocks.NewRODataColumnWithRoot(dataColumnSidecar, root)
|
|
if err != nil {
|
|
return VerifiedRODataColumnError(err)
|
|
}
|
|
|
|
// Create a verified RO data column.
|
|
verifiedRODataColumn := blocks.NewVerifiedRODataColumn(roDataColumnSidecar)
|
|
|
|
return verifiedRODataColumn, nil
|
|
}
|