github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/core/state/transition_no_verify_sig_test.go (about) 1 package state_test 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/prysmaticlabs/prysm/beacon-chain/core/helpers" 8 "github.com/prysmaticlabs/prysm/beacon-chain/core/state" 9 ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1" 10 "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1/wrapper" 11 "github.com/prysmaticlabs/prysm/shared/bytesutil" 12 "github.com/prysmaticlabs/prysm/shared/params" 13 "github.com/prysmaticlabs/prysm/shared/testutil" 14 "github.com/prysmaticlabs/prysm/shared/testutil/assert" 15 "github.com/prysmaticlabs/prysm/shared/testutil/require" 16 ) 17 18 func TestExecuteStateTransitionNoVerify_FullProcess(t *testing.T) { 19 beaconState, privKeys := testutil.DeterministicGenesisState(t, 100) 20 21 eth1Data := ðpb.Eth1Data{ 22 DepositCount: 100, 23 DepositRoot: bytesutil.PadTo([]byte{2}, 32), 24 BlockHash: make([]byte, 32), 25 } 26 require.NoError(t, beaconState.SetSlot(params.BeaconConfig().SlotsPerEpoch-1)) 27 e := beaconState.Eth1Data() 28 e.DepositCount = 100 29 require.NoError(t, beaconState.SetEth1Data(e)) 30 bh := beaconState.LatestBlockHeader() 31 bh.Slot = beaconState.Slot() 32 require.NoError(t, beaconState.SetLatestBlockHeader(bh)) 33 require.NoError(t, beaconState.SetEth1DataVotes([]*ethpb.Eth1Data{eth1Data})) 34 35 require.NoError(t, beaconState.SetSlot(beaconState.Slot()+1)) 36 epoch := helpers.CurrentEpoch(beaconState) 37 randaoReveal, err := testutil.RandaoReveal(beaconState, epoch, privKeys) 38 require.NoError(t, err) 39 require.NoError(t, beaconState.SetSlot(beaconState.Slot()-1)) 40 41 nextSlotState, err := state.ProcessSlots(context.Background(), beaconState.Copy(), beaconState.Slot()+1) 42 require.NoError(t, err) 43 parentRoot, err := nextSlotState.LatestBlockHeader().HashTreeRoot() 44 require.NoError(t, err) 45 proposerIdx, err := helpers.BeaconProposerIndex(nextSlotState) 46 require.NoError(t, err) 47 block := testutil.NewBeaconBlock() 48 block.Block.ProposerIndex = proposerIdx 49 block.Block.Slot = beaconState.Slot() + 1 50 block.Block.ParentRoot = parentRoot[:] 51 block.Block.Body.RandaoReveal = randaoReveal 52 block.Block.Body.Eth1Data = eth1Data 53 54 stateRoot, err := state.CalculateStateRoot(context.Background(), beaconState, wrapper.WrappedPhase0SignedBeaconBlock(block)) 55 require.NoError(t, err) 56 57 block.Block.StateRoot = stateRoot[:] 58 59 sig, err := testutil.BlockSignature(beaconState, block.Block, privKeys) 60 require.NoError(t, err) 61 block.Signature = sig.Marshal() 62 63 set, _, err := state.ExecuteStateTransitionNoVerifyAnySig(context.Background(), beaconState, wrapper.WrappedPhase0SignedBeaconBlock(block)) 64 assert.NoError(t, err) 65 verified, err := set.Verify() 66 assert.NoError(t, err) 67 assert.Equal(t, true, verified, "Could not verify signature set") 68 } 69 70 func TestExecuteStateTransitionNoVerifySignature_CouldNotVerifyStateRoot(t *testing.T) { 71 beaconState, privKeys := testutil.DeterministicGenesisState(t, 100) 72 73 eth1Data := ðpb.Eth1Data{ 74 DepositCount: 100, 75 DepositRoot: bytesutil.PadTo([]byte{2}, 32), 76 BlockHash: make([]byte, 32), 77 } 78 require.NoError(t, beaconState.SetSlot(params.BeaconConfig().SlotsPerEpoch-1)) 79 e := beaconState.Eth1Data() 80 e.DepositCount = 100 81 require.NoError(t, beaconState.SetEth1Data(e)) 82 bh := beaconState.LatestBlockHeader() 83 bh.Slot = beaconState.Slot() 84 require.NoError(t, beaconState.SetLatestBlockHeader(bh)) 85 require.NoError(t, beaconState.SetEth1DataVotes([]*ethpb.Eth1Data{eth1Data})) 86 87 require.NoError(t, beaconState.SetSlot(beaconState.Slot()+1)) 88 epoch := helpers.CurrentEpoch(beaconState) 89 randaoReveal, err := testutil.RandaoReveal(beaconState, epoch, privKeys) 90 require.NoError(t, err) 91 require.NoError(t, beaconState.SetSlot(beaconState.Slot()-1)) 92 93 nextSlotState, err := state.ProcessSlots(context.Background(), beaconState.Copy(), beaconState.Slot()+1) 94 require.NoError(t, err) 95 parentRoot, err := nextSlotState.LatestBlockHeader().HashTreeRoot() 96 require.NoError(t, err) 97 proposerIdx, err := helpers.BeaconProposerIndex(nextSlotState) 98 require.NoError(t, err) 99 block := testutil.NewBeaconBlock() 100 block.Block.ProposerIndex = proposerIdx 101 block.Block.Slot = beaconState.Slot() + 1 102 block.Block.ParentRoot = parentRoot[:] 103 block.Block.Body.RandaoReveal = randaoReveal 104 block.Block.Body.Eth1Data = eth1Data 105 106 stateRoot, err := state.CalculateStateRoot(context.Background(), beaconState, wrapper.WrappedPhase0SignedBeaconBlock(block)) 107 require.NoError(t, err) 108 109 block.Block.StateRoot = stateRoot[:] 110 111 sig, err := testutil.BlockSignature(beaconState, block.Block, privKeys) 112 require.NoError(t, err) 113 block.Signature = sig.Marshal() 114 115 block.Block.StateRoot = bytesutil.PadTo([]byte{'a'}, 32) 116 _, _, err = state.ExecuteStateTransitionNoVerifyAnySig(context.Background(), beaconState, wrapper.WrappedPhase0SignedBeaconBlock(block)) 117 require.ErrorContains(t, "could not validate state root", err) 118 } 119 120 func TestProcessBlockNoVerify_PassesProcessingConditions(t *testing.T) { 121 beaconState, block, _, _, _ := createFullBlockWithOperations(t) 122 set, _, err := state.ProcessBlockNoVerifyAnySig(context.Background(), beaconState, wrapper.WrappedPhase0SignedBeaconBlock(block)) 123 require.NoError(t, err) 124 // Test Signature set verifies. 125 verified, err := set.Verify() 126 require.NoError(t, err) 127 assert.Equal(t, true, verified, "Could not verify signature set.") 128 }