mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-24 12:27:18 +00:00
6d79f61fda
* add process slashings * verify sig * add method * add test * add in process slashings functionality * target state for aggregate * comment * Radek comments
90 lines
2.9 KiB
Go
90 lines
2.9 KiB
Go
package blocks_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/core/signing"
|
|
"github.com/prysmaticlabs/prysm/config/params"
|
|
"github.com/prysmaticlabs/prysm/crypto/bls"
|
|
"github.com/prysmaticlabs/prysm/encoding/bytesutil"
|
|
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
|
"github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1/wrapper"
|
|
"github.com/prysmaticlabs/prysm/testing/assert"
|
|
"github.com/prysmaticlabs/prysm/testing/require"
|
|
"github.com/prysmaticlabs/prysm/testing/util"
|
|
)
|
|
|
|
func TestVerifyBlockHeaderSignature(t *testing.T) {
|
|
beaconState, err := util.NewBeaconState()
|
|
require.NoError(t, err)
|
|
|
|
privKey, err := bls.RandKey()
|
|
require.NoError(t, err)
|
|
validators := make([]*ethpb.Validator, 1)
|
|
validators[0] = ðpb.Validator{
|
|
PublicKey: privKey.PublicKey().Marshal(),
|
|
WithdrawalCredentials: make([]byte, 32),
|
|
EffectiveBalance: params.BeaconConfig().MaxEffectiveBalance,
|
|
}
|
|
err = beaconState.SetValidators(validators)
|
|
require.NoError(t, err)
|
|
|
|
// Sign the block header.
|
|
blockHeader := util.HydrateSignedBeaconHeader(ðpb.SignedBeaconBlockHeader{
|
|
Header: ðpb.BeaconBlockHeader{
|
|
Slot: 0,
|
|
ProposerIndex: 0,
|
|
},
|
|
})
|
|
domain, err := signing.Domain(
|
|
beaconState.Fork(),
|
|
0,
|
|
params.BeaconConfig().DomainBeaconProposer,
|
|
beaconState.GenesisValidatorRoot(),
|
|
)
|
|
require.NoError(t, err)
|
|
htr, err := blockHeader.Header.HashTreeRoot()
|
|
require.NoError(t, err)
|
|
container := ðpb.SigningData{
|
|
ObjectRoot: htr[:],
|
|
Domain: domain,
|
|
}
|
|
require.NoError(t, err)
|
|
signingRoot, err := container.HashTreeRoot()
|
|
require.NoError(t, err)
|
|
|
|
// Set the signature in the block header.
|
|
blockHeader.Signature = privKey.Sign(signingRoot[:]).Marshal()
|
|
|
|
// Sig should verify.
|
|
err = blocks.VerifyBlockHeaderSignature(beaconState, blockHeader)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestVerifyBlockSignatureUsingCurrentFork(t *testing.T) {
|
|
params.SetupTestConfigCleanup(t)
|
|
bCfg := params.BeaconConfig()
|
|
bCfg.AltairForkEpoch = 100
|
|
bCfg.ForkVersionSchedule[bytesutil.ToBytes4(bCfg.AltairForkVersion)] = 100
|
|
params.OverrideBeaconConfig(bCfg)
|
|
bState, keys := util.DeterministicGenesisState(t, 100)
|
|
altairBlk := util.NewBeaconBlockAltair()
|
|
altairBlk.Block.ProposerIndex = 0
|
|
altairBlk.Block.Slot = params.BeaconConfig().SlotsPerEpoch * 100
|
|
fData := ðpb.Fork{
|
|
Epoch: 100,
|
|
CurrentVersion: params.BeaconConfig().AltairForkVersion,
|
|
PreviousVersion: params.BeaconConfig().GenesisForkVersion,
|
|
}
|
|
domain, err := signing.Domain(fData, 100, params.BeaconConfig().DomainBeaconProposer, bState.GenesisValidatorRoot())
|
|
assert.NoError(t, err)
|
|
rt, err := signing.ComputeSigningRoot(altairBlk.Block, domain)
|
|
assert.NoError(t, err)
|
|
sig := keys[0].Sign(rt[:]).Marshal()
|
|
altairBlk.Signature = sig
|
|
wsb, err := wrapper.WrappedAltairSignedBeaconBlock(altairBlk)
|
|
require.NoError(t, err)
|
|
assert.NoError(t, blocks.VerifyBlockSignatureUsingCurrentFork(bState, wsb))
|
|
}
|