mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-05 09:14:28 +00:00
70e1b11aeb
Co-authored-by: Kasey Kirkham <kasey@users.noreply.github.com>
72 lines
2.8 KiB
Go
72 lines
2.8 KiB
Go
package storage
|
|
|
|
import (
|
|
"path"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/prysmaticlabs/prysm/v5/beacon-chain/db/filesystem"
|
|
"github.com/prysmaticlabs/prysm/v5/beacon-chain/node"
|
|
"github.com/prysmaticlabs/prysm/v5/cmd"
|
|
"github.com/prysmaticlabs/prysm/v5/config/params"
|
|
"github.com/prysmaticlabs/prysm/v5/consensus-types/primitives"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
var (
|
|
// BlobStoragePathFlag defines a flag to start the beacon chain from a give genesis state file.
|
|
BlobStoragePathFlag = &cli.PathFlag{
|
|
Name: "blob-path",
|
|
Usage: "Location for blob storage. Default location will be a 'blobs' directory next to the beacon db.",
|
|
}
|
|
BlobRetentionEpochFlag = &cli.Uint64Flag{
|
|
Name: "blob-retention-epochs",
|
|
Usage: "Override the default blob retention period (measured in epochs). The node will exit with an error at startup if the value is less than the default of 4096 epochs.",
|
|
Value: uint64(params.BeaconConfig().MinEpochsForBlobsSidecarsRequest),
|
|
Aliases: []string{"extend-blob-retention-epoch"},
|
|
}
|
|
)
|
|
|
|
// BeaconNodeOptions sets configuration values on the node.BeaconNode value at node startup.
|
|
// Note: we can't get the right context from cli.Context, because the beacon node setup code uses this context to
|
|
// create a cancellable context. If we switch to using App.RunContext, we can set up this cancellation in the cmd
|
|
// package instead, and allow the functional options to tap into context cancellation.
|
|
func BeaconNodeOptions(c *cli.Context) ([]node.Option, error) {
|
|
e, err := blobRetentionEpoch(c)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
opts := []node.Option{node.WithBlobStorageOptions(
|
|
filesystem.WithBlobRetentionEpochs(e), filesystem.WithBasePath(blobStoragePath(c)),
|
|
)}
|
|
return opts, nil
|
|
}
|
|
|
|
func blobStoragePath(c *cli.Context) string {
|
|
blobsPath := c.Path(BlobStoragePathFlag.Name)
|
|
if blobsPath == "" {
|
|
// append a "blobs" subdir to the end of the data dir path
|
|
blobsPath = path.Join(c.String(cmd.DataDirFlag.Name), "blobs")
|
|
}
|
|
return blobsPath
|
|
}
|
|
|
|
var errInvalidBlobRetentionEpochs = errors.New("value is smaller than spec minimum")
|
|
|
|
// blobRetentionEpoch returns the spec default MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUEST
|
|
// or a user-specified flag overriding this value. If a user-specified override is
|
|
// smaller than the spec default, an error will be returned.
|
|
func blobRetentionEpoch(cliCtx *cli.Context) (primitives.Epoch, error) {
|
|
spec := params.BeaconConfig().MinEpochsForBlobsSidecarsRequest
|
|
if !cliCtx.IsSet(BlobRetentionEpochFlag.Name) {
|
|
return spec, nil
|
|
}
|
|
|
|
re := primitives.Epoch(cliCtx.Uint64(BlobRetentionEpochFlag.Name))
|
|
// Validate the epoch value against the spec default.
|
|
if re < params.BeaconConfig().MinEpochsForBlobsSidecarsRequest {
|
|
return spec, errors.Wrapf(errInvalidBlobRetentionEpochs, "%s=%d, spec=%d", BlobRetentionEpochFlag.Name, re, spec)
|
|
}
|
|
|
|
return re, nil
|
|
}
|