mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-11 04:00:05 +00:00
40 lines
1.3 KiB
Go
40 lines
1.3 KiB
Go
|
package client
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"github.com/pkg/errors"
|
||
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/core/signing"
|
||
|
fieldparams "github.com/prysmaticlabs/prysm/v4/config/fieldparams"
|
||
|
"github.com/prysmaticlabs/prysm/v4/config/params"
|
||
|
ethpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1"
|
||
|
validatorpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1/validator-client"
|
||
|
"github.com/prysmaticlabs/prysm/v4/time/slots"
|
||
|
)
|
||
|
|
||
|
func (v *validator) signBlob(ctx context.Context, blob *ethpb.BlobSidecar, pubKey [fieldparams.BLSPubkeyLength]byte) ([]byte, error) {
|
||
|
epoch := slots.ToEpoch(blob.Slot)
|
||
|
domain, err := v.domainData(ctx, epoch, params.BeaconConfig().DomainBlobSidecar[:])
|
||
|
if err != nil {
|
||
|
return nil, errors.Wrap(err, domainDataErr)
|
||
|
}
|
||
|
if domain == nil {
|
||
|
return nil, errors.New(domainDataErr)
|
||
|
}
|
||
|
sr, err := signing.ComputeSigningRoot(blob, domain.SignatureDomain)
|
||
|
if err != nil {
|
||
|
return nil, errors.Wrap(err, signingRootErr)
|
||
|
}
|
||
|
sig, err := v.keyManager.Sign(ctx, &validatorpb.SignRequest{
|
||
|
PublicKey: pubKey[:],
|
||
|
SigningRoot: sr[:],
|
||
|
SignatureDomain: domain.SignatureDomain,
|
||
|
Object: &validatorpb.SignRequest_Blob{Blob: blob},
|
||
|
SigningSlot: blob.Slot,
|
||
|
})
|
||
|
if err != nil {
|
||
|
return nil, errors.Wrap(err, "could not sign block proposal")
|
||
|
}
|
||
|
return sig.Marshal(), nil
|
||
|
}
|