From 6fed51d380ed637748199d7dc8375836169be9b4 Mon Sep 17 00:00:00 2001 From: Nishant Das Date: Fri, 8 May 2020 18:14:18 +0800 Subject: [PATCH] Don't Copy The Whole Validator Map each time (#5780) * fix copying issues * revert some changes --- beacon-chain/core/blocks/block_operations.go | 3 --- beacon-chain/state/setters.go | 9 +++++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/beacon-chain/core/blocks/block_operations.go b/beacon-chain/core/blocks/block_operations.go index 276fc3dbc084..1711b2dd3cb8 100644 --- a/beacon-chain/core/blocks/block_operations.go +++ b/beacon-chain/core/blocks/block_operations.go @@ -945,7 +945,6 @@ func ProcessDeposit( pubKey := deposit.Data.PublicKey amount := deposit.Data.Amount index, ok := beaconState.ValidatorIndexByPubkey(bytesutil.ToBytes48(pubKey)) - numVals := beaconState.NumValidators() if !ok { domain, err := helpers.ComputeDomain(params.BeaconConfig().DomainDeposit, nil, nil) if err != nil { @@ -976,8 +975,6 @@ func ProcessDeposit( if err := beaconState.AppendBalance(amount); err != nil { return nil, err } - numVals++ - beaconState.SetValidatorIndexByPubkey(bytesutil.ToBytes48(pubKey), uint64(numVals-1)) } else { if err := helpers.IncreaseBalance(beaconState, uint64(index), amount); err != nil { return nil, err diff --git a/beacon-chain/state/setters.go b/beacon-chain/state/setters.go index d730b16dc272..88d8c44da17d 100644 --- a/beacon-chain/state/setters.go +++ b/beacon-chain/state/setters.go @@ -666,10 +666,15 @@ func (b *BeaconState) AppendValidator(val *ethpb.Validator) error { b.lock.Lock() defer b.lock.Unlock() + // append validator to slice and add + // it to the validator map b.state.Validators = append(vals, val) + valIdx := uint64(len(b.state.Validators) - 1) + valMap := coreutils.ValidatorIndexMap(b.state.Validators) + b.markFieldAsDirty(validators) - b.AddDirtyIndices(validators, []uint64{uint64(len(b.state.Validators) - 1)}) - b.valIdxMap = coreutils.ValidatorIndexMap(b.state.Validators) + b.AddDirtyIndices(validators, []uint64{valIdx}) + b.valIdxMap = valMap return nil }