mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-23 11:57:18 +00:00
d17996f8b0
* Update V3 from V4 * Fix build v3 -> v4 * Update ssz * Update beacon_chain.pb.go * Fix formatter import * Update update-mockgen.sh comment to v4 * Fix conflicts. Pass build and tests * Fix test
47 lines
1.6 KiB
Go
47 lines
1.6 KiB
Go
package checkpoint
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/prysmaticlabs/prysm/v4/api/client/beacon"
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/db"
|
|
"github.com/prysmaticlabs/prysm/v4/config/params"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// APIInitializer manages initializing the beacon node using checkpoint sync, retrieving the checkpoint state and root
|
|
// from the remote beacon node api.
|
|
type APIInitializer struct {
|
|
c *beacon.Client
|
|
}
|
|
|
|
// NewAPIInitializer creates an APIInitializer, handling the set up of a beacon node api client
|
|
// using the provided host string.
|
|
func NewAPIInitializer(beaconNodeHost string) (*APIInitializer, error) {
|
|
c, err := beacon.NewClient(beaconNodeHost)
|
|
if err != nil {
|
|
return nil, errors.Wrapf(err, "unable to parse beacon node url or hostname - %s", beaconNodeHost)
|
|
}
|
|
return &APIInitializer{c: c}, nil
|
|
}
|
|
|
|
// Initialize downloads origin state and block for checkpoint sync and initializes database records to
|
|
// prepare the node to begin syncing from that point.
|
|
func (dl *APIInitializer) Initialize(ctx context.Context, d db.Database) error {
|
|
origin, err := d.OriginCheckpointBlockRoot(ctx)
|
|
if err == nil && origin != params.BeaconConfig().ZeroHash {
|
|
log.Warnf("origin checkpoint root %#x found in db, ignoring checkpoint sync flags", origin)
|
|
return nil
|
|
} else {
|
|
if !errors.Is(err, db.ErrNotFound) {
|
|
return errors.Wrap(err, "error while checking database for origin root")
|
|
}
|
|
}
|
|
od, err := beacon.DownloadFinalizedData(ctx, dl.c)
|
|
if err != nil {
|
|
return errors.Wrap(err, "Error retrieving checkpoint origin state and block")
|
|
}
|
|
return d.SaveOrigin(ctx, od.StateBytes(), od.BlockBytes())
|
|
}
|