mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-25 04:47:18 +00:00
d077483577
* v3 import renamings * tidy * fmt * rev * Update beacon-chain/core/epoch/precompute/reward_penalty_test.go * Update beacon-chain/core/helpers/validators_test.go * Update beacon-chain/db/alias.go * Update beacon-chain/db/alias.go * Update beacon-chain/db/alias.go * Update beacon-chain/db/iface/BUILD.bazel * Update beacon-chain/db/kv/kv.go * Update beacon-chain/db/kv/state.go * Update beacon-chain/rpc/prysm/v1alpha1/validator/attester_test.go * Update beacon-chain/rpc/prysm/v1alpha1/validator/attester_test.go * Update beacon-chain/sync/initial-sync/service.go * fix deps * fix bad replacements * fix bad replacements * change back * gohashtree version * fix deps Co-authored-by: Nishant Das <nishdas93@gmail.com> Co-authored-by: Potuz <potuz@prysmaticlabs.com>
99 lines
3.0 KiB
Go
99 lines
3.0 KiB
Go
package simulator
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/prysmaticlabs/prysm/v3/beacon-chain/core/signing"
|
|
"github.com/prysmaticlabs/prysm/v3/beacon-chain/state"
|
|
"github.com/prysmaticlabs/prysm/v3/config/params"
|
|
types "github.com/prysmaticlabs/prysm/v3/consensus-types/primitives"
|
|
"github.com/prysmaticlabs/prysm/v3/crypto/bls"
|
|
"github.com/prysmaticlabs/prysm/v3/crypto/rand"
|
|
"github.com/prysmaticlabs/prysm/v3/encoding/bytesutil"
|
|
ethpb "github.com/prysmaticlabs/prysm/v3/proto/prysm/v1alpha1"
|
|
)
|
|
|
|
func (s *Simulator) generateBlockHeadersForSlot(
|
|
ctx context.Context, slot types.Slot,
|
|
) ([]*ethpb.SignedBeaconBlockHeader, []*ethpb.ProposerSlashing, error) {
|
|
blocks := make([]*ethpb.SignedBeaconBlockHeader, 0)
|
|
slashings := make([]*ethpb.ProposerSlashing, 0)
|
|
proposer := rand.NewGenerator().Uint64() % s.srvConfig.Params.NumValidators
|
|
|
|
parentRoot := [32]byte{}
|
|
beaconState, err := s.srvConfig.StateGen.StateByRoot(ctx, parentRoot)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
block := ðpb.SignedBeaconBlockHeader{
|
|
Header: ðpb.BeaconBlockHeader{
|
|
Slot: slot,
|
|
ProposerIndex: types.ValidatorIndex(proposer),
|
|
ParentRoot: bytesutil.PadTo([]byte{}, 32),
|
|
StateRoot: bytesutil.PadTo([]byte{}, 32),
|
|
BodyRoot: bytesutil.PadTo([]byte("good block"), 32),
|
|
},
|
|
}
|
|
sig, err := s.signBlockHeader(beaconState, block)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
block.Signature = sig.Marshal()
|
|
|
|
blocks = append(blocks, block)
|
|
if rand.NewGenerator().Float64() < s.srvConfig.Params.ProposerSlashingProbab {
|
|
log.WithField("proposerIndex", proposer).Infof("Slashable block made")
|
|
slashableBlock := ðpb.SignedBeaconBlockHeader{
|
|
Header: ðpb.BeaconBlockHeader{
|
|
Slot: slot,
|
|
ProposerIndex: types.ValidatorIndex(proposer),
|
|
ParentRoot: bytesutil.PadTo([]byte{}, 32),
|
|
StateRoot: bytesutil.PadTo([]byte{}, 32),
|
|
BodyRoot: bytesutil.PadTo([]byte("bad block"), 32),
|
|
},
|
|
Signature: sig.Marshal(),
|
|
}
|
|
sig, err = s.signBlockHeader(beaconState, slashableBlock)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
slashableBlock.Signature = sig.Marshal()
|
|
|
|
blocks = append(blocks, slashableBlock)
|
|
slashings = append(slashings, ðpb.ProposerSlashing{
|
|
Header_1: block,
|
|
Header_2: slashableBlock,
|
|
})
|
|
}
|
|
return blocks, slashings, nil
|
|
}
|
|
|
|
func (s *Simulator) signBlockHeader(
|
|
beaconState state.BeaconState,
|
|
header *ethpb.SignedBeaconBlockHeader,
|
|
) (bls.Signature, error) {
|
|
domain, err := signing.Domain(
|
|
beaconState.Fork(),
|
|
0,
|
|
params.BeaconConfig().DomainBeaconProposer,
|
|
beaconState.GenesisValidatorsRoot(),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
htr, err := header.Header.HashTreeRoot()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
container := ðpb.SigningData{
|
|
ObjectRoot: htr[:],
|
|
Domain: domain,
|
|
}
|
|
signingRoot, err := container.HashTreeRoot()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
validatorPrivKey := s.srvConfig.PrivateKeysByValidatorIndex[header.Header.ProposerIndex]
|
|
return validatorPrivKey.Sign(signingRoot[:]), nil
|
|
}
|