mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-24 12:27:18 +00:00
44973b0bb3
* in progress... * in progress... * remove log * log root * Revert "Auxiliary commit to revert individual files from f12a609ea2a2f1e87e97321f3a717cd324b5ae97" This reverts commit 5ae35edb6477d8d0ea4e94b273efc6590484da85. * cleanup * remove log * remove whitespace * remove logs * more stuff * copy * always rebuild trie * revert * add state * init state * fix all * uintptr * move slice to new package * lock in `Detach` * remove constraint * reorder * blockroots and stateroots * fill roots in empty() * fix hasher * implement slice for balances and inactivity scores * detach in setters * Revert "implement slice for balances and inactivity scores" This reverts commit 59eb9df8d766cb1c44a7eb5b3f5e3c042249943d. # Conflicts: # beacon-chain/state/state-native/setters_validator.go * use counter to track states * typos * rename interface * balances * gauge * some improvements * first try with map * fix * inactivity scores in progress * fix test # Conflicts: # beacon-chain/state/state-native/helpers_test.go * test fixes * ToProto fix * copy roots * validators * build fixes * fix bug in `ToProto` * fix fuzz test * fix bug in slice getters * fix state equality checks * make tests pass * make tests pass * more test updates * Revert "Auxiliary commit to revert individual files from 34e7344bff08a589e6341bb1829e3cb74159e878" This reverts commit ecd64efa8917f37ca41460e0356ff007fe55dd9d. * Revert "make tests pass" This reverts commit 0cf00f19eecf4678cd2b866dd107f3179d0426ef. * Revert "make tests pass" This reverts commit 521b65e1d2e13be3d720f333008b6838a8e78878. * pass tests * deepequal identifiable types * Deflake `cloners_test.go` * feature flag for block roots * feature flag * remove recursive locks * reduce complexity of rootSelector * fix randao mixes root * some fixes * revisit tests * revert change to field trie helpers * initialize field map for tests * remove whitespace * initialize roots with proper length * more fixes * out of bounds message fix * optimize length calculation * remove call to Len in PubkeyAtIndex * don't log deposits * unit tests * unit tests * fix * comments * test fixes * id * remove Enumerator interface * review feedback * simplify field trie * bring back fieldtrie package * fix bazel file * use handle32ByteArrays for root computation * fix locks * metrics * bzl * simplify some things * use htr in state test * remove code from require package * gzl * more htr * Fuzzing of the multi-value slice * assert values * getter optimizations * use At when reading from validators * Nishant's review * restore safe copy * remove empty line * build fix * restore how we get root at index for deafult mode * more review comments * optimize default behavior * simplify Slice calls * test fix * remove unnecessary package * remove unused setter * make fieldMap unexported * some improvements in state package * call `Slice` instead of manually copying * unlock in ReadFromEveryValidator * Potuz's comments * lock the state when reading from all validators # Conflicts: # beacon-chain/state/state-native/getters_validator.go * add back preston's changes * add index --------- Co-authored-by: Potuz <potuz@prysmaticlabs.com> Co-authored-by: nisdas <nishdas93@gmail.com> Co-authored-by: Preston Van Loon <pvanloon@offchainlabs.com>
169 lines
10 KiB
Go
169 lines
10 KiB
Go
//go:build !minimal
|
|
|
|
package state_native
|
|
|
|
import (
|
|
"encoding/json"
|
|
"sync"
|
|
|
|
"github.com/prysmaticlabs/go-bitfield"
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/state/fieldtrie"
|
|
customtypes "github.com/prysmaticlabs/prysm/v4/beacon-chain/state/state-native/custom-types"
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/state/state-native/types"
|
|
"github.com/prysmaticlabs/prysm/v4/beacon-chain/state/stateutil"
|
|
"github.com/prysmaticlabs/prysm/v4/config/features"
|
|
"github.com/prysmaticlabs/prysm/v4/consensus-types/primitives"
|
|
enginev1 "github.com/prysmaticlabs/prysm/v4/proto/engine/v1"
|
|
ethpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1"
|
|
)
|
|
|
|
// BeaconState defines a struct containing utilities for the Ethereum Beacon Chain state, defining
|
|
// getters and setters for its respective values and helpful functions such as HashTreeRoot().
|
|
type BeaconState struct {
|
|
version int
|
|
genesisTime uint64
|
|
genesisValidatorsRoot [32]byte
|
|
slot primitives.Slot
|
|
fork *ethpb.Fork
|
|
latestBlockHeader *ethpb.BeaconBlockHeader
|
|
blockRoots customtypes.BlockRoots
|
|
blockRootsMultiValue *MultiValueBlockRoots
|
|
stateRoots customtypes.StateRoots
|
|
stateRootsMultiValue *MultiValueStateRoots
|
|
historicalRoots customtypes.HistoricalRoots
|
|
historicalSummaries []*ethpb.HistoricalSummary
|
|
eth1Data *ethpb.Eth1Data
|
|
eth1DataVotes []*ethpb.Eth1Data
|
|
eth1DepositIndex uint64
|
|
validators []*ethpb.Validator
|
|
validatorsMultiValue *MultiValueValidators
|
|
balances []uint64
|
|
balancesMultiValue *MultiValueBalances
|
|
randaoMixes customtypes.RandaoMixes
|
|
randaoMixesMultiValue *MultiValueRandaoMixes
|
|
slashings []uint64
|
|
previousEpochAttestations []*ethpb.PendingAttestation
|
|
currentEpochAttestations []*ethpb.PendingAttestation
|
|
previousEpochParticipation []byte
|
|
currentEpochParticipation []byte
|
|
justificationBits bitfield.Bitvector4
|
|
previousJustifiedCheckpoint *ethpb.Checkpoint
|
|
currentJustifiedCheckpoint *ethpb.Checkpoint
|
|
finalizedCheckpoint *ethpb.Checkpoint
|
|
inactivityScores []uint64
|
|
inactivityScoresMultiValue *MultiValueInactivityScores
|
|
currentSyncCommittee *ethpb.SyncCommittee
|
|
nextSyncCommittee *ethpb.SyncCommittee
|
|
latestExecutionPayloadHeader *enginev1.ExecutionPayloadHeader
|
|
latestExecutionPayloadHeaderCapella *enginev1.ExecutionPayloadHeaderCapella
|
|
latestExecutionPayloadHeaderDeneb *enginev1.ExecutionPayloadHeaderDeneb
|
|
nextWithdrawalIndex uint64
|
|
nextWithdrawalValidatorIndex primitives.ValidatorIndex
|
|
|
|
id uint64
|
|
lock sync.RWMutex
|
|
dirtyFields map[types.FieldIndex]bool
|
|
dirtyIndices map[types.FieldIndex][]uint64
|
|
stateFieldLeaves map[types.FieldIndex]*fieldtrie.FieldTrie
|
|
rebuildTrie map[types.FieldIndex]bool
|
|
valMapHandler *stateutil.ValidatorMapHandler
|
|
merkleLayers [][][]byte
|
|
sharedFieldReferences map[types.FieldIndex]*stateutil.Reference
|
|
}
|
|
|
|
type beaconStateMarshalable struct {
|
|
Version int `json:"version" yaml:"version"`
|
|
GenesisTime uint64 `json:"genesis_time" yaml:"genesis_time"`
|
|
GenesisValidatorsRoot [32]byte `json:"genesis_validators_root" yaml:"genesis_validators_root"`
|
|
Slot primitives.Slot `json:"slot" yaml:"slot"`
|
|
Fork *ethpb.Fork `json:"fork" yaml:"fork"`
|
|
LatestBlockHeader *ethpb.BeaconBlockHeader `json:"latest_block_header" yaml:"latest_block_header"`
|
|
BlockRoots customtypes.BlockRoots `json:"block_roots" yaml:"block_roots"`
|
|
StateRoots customtypes.StateRoots `json:"state_roots" yaml:"state_roots"`
|
|
HistoricalRoots customtypes.HistoricalRoots `json:"historical_roots" yaml:"historical_roots"`
|
|
HistoricalSummaries []*ethpb.HistoricalSummary `json:"historical_summaries" yaml:"historical_summaries"`
|
|
Eth1Data *ethpb.Eth1Data `json:"eth_1_data" yaml:"eth_1_data"`
|
|
Eth1DataVotes []*ethpb.Eth1Data `json:"eth_1_data_votes" yaml:"eth_1_data_votes"`
|
|
Eth1DepositIndex uint64 `json:"eth_1_deposit_index" yaml:"eth_1_deposit_index"`
|
|
Validators []*ethpb.Validator `json:"validators" yaml:"validators"`
|
|
Balances []uint64 `json:"balances" yaml:"balances"`
|
|
RandaoMixes customtypes.RandaoMixes `json:"randao_mixes" yaml:"randao_mixes"`
|
|
Slashings []uint64 `json:"slashings" yaml:"slashings"`
|
|
PreviousEpochAttestations []*ethpb.PendingAttestation `json:"previous_epoch_attestations" yaml:"previous_epoch_attestations"`
|
|
CurrentEpochAttestations []*ethpb.PendingAttestation `json:"current_epoch_attestations" yaml:"current_epoch_attestations"`
|
|
PreviousEpochParticipation []byte `json:"previous_epoch_participation" yaml:"previous_epoch_participation"`
|
|
CurrentEpochParticipation []byte `json:"current_epoch_participation" yaml:"current_epoch_participation"`
|
|
JustificationBits bitfield.Bitvector4 `json:"justification_bits" yaml:"justification_bits"`
|
|
PreviousJustifiedCheckpoint *ethpb.Checkpoint `json:"previous_justified_checkpoint" yaml:"previous_justified_checkpoint"`
|
|
CurrentJustifiedCheckpoint *ethpb.Checkpoint `json:"current_justified_checkpoint" yaml:"current_justified_checkpoint"`
|
|
FinalizedCheckpoint *ethpb.Checkpoint `json:"finalized_checkpoint" yaml:"finalized_checkpoint"`
|
|
InactivityScores []uint64 `json:"inactivity_scores" yaml:"inactivity_scores"`
|
|
CurrentSyncCommittee *ethpb.SyncCommittee `json:"current_sync_committee" yaml:"current_sync_committee"`
|
|
NextSyncCommittee *ethpb.SyncCommittee `json:"next_sync_committee" yaml:"next_sync_committee"`
|
|
LatestExecutionPayloadHeader *enginev1.ExecutionPayloadHeader `json:"latest_execution_payload_header" yaml:"latest_execution_payload_header"`
|
|
LatestExecutionPayloadHeaderCapella *enginev1.ExecutionPayloadHeaderCapella `json:"latest_execution_payload_header_capella" yaml:"latest_execution_payload_header_capella"`
|
|
NextWithdrawalIndex uint64 `json:"next_withdrawal_index" yaml:"next_withdrawal_index"`
|
|
NextWithdrawalValidatorIndex primitives.ValidatorIndex `json:"next_withdrawal_validator_index" yaml:"next_withdrawal_validator_index"`
|
|
}
|
|
|
|
func (b *BeaconState) MarshalJSON() ([]byte, error) {
|
|
var bRoots customtypes.BlockRoots
|
|
var sRoots customtypes.StateRoots
|
|
var mixes customtypes.RandaoMixes
|
|
var balances []uint64
|
|
var inactivityScores []uint64
|
|
var vals []*ethpb.Validator
|
|
|
|
if features.Get().EnableExperimentalState {
|
|
bRoots = b.blockRootsMultiValue.Value(b)
|
|
sRoots = b.stateRootsMultiValue.Value(b)
|
|
mixes = b.randaoMixesMultiValue.Value(b)
|
|
balances = b.balancesMultiValue.Value(b)
|
|
inactivityScores = b.inactivityScoresMultiValue.Value(b)
|
|
vals = b.validatorsMultiValue.Value(b)
|
|
} else {
|
|
bRoots = b.blockRoots
|
|
sRoots = b.stateRoots
|
|
mixes = b.randaoMixes
|
|
balances = b.balances
|
|
inactivityScores = b.inactivityScores
|
|
vals = b.validators
|
|
}
|
|
|
|
marshalable := &beaconStateMarshalable{
|
|
Version: b.version,
|
|
GenesisTime: b.genesisTime,
|
|
GenesisValidatorsRoot: b.genesisValidatorsRoot,
|
|
Slot: b.slot,
|
|
Fork: b.fork,
|
|
LatestBlockHeader: b.latestBlockHeader,
|
|
BlockRoots: bRoots,
|
|
StateRoots: sRoots,
|
|
HistoricalRoots: b.historicalRoots,
|
|
HistoricalSummaries: b.historicalSummaries,
|
|
Eth1Data: b.eth1Data,
|
|
Eth1DataVotes: b.eth1DataVotes,
|
|
Eth1DepositIndex: b.eth1DepositIndex,
|
|
Validators: vals,
|
|
Balances: balances,
|
|
RandaoMixes: mixes,
|
|
Slashings: b.slashings,
|
|
PreviousEpochAttestations: b.previousEpochAttestations,
|
|
CurrentEpochAttestations: b.currentEpochAttestations,
|
|
PreviousEpochParticipation: b.previousEpochParticipation,
|
|
CurrentEpochParticipation: b.currentEpochParticipation,
|
|
JustificationBits: b.justificationBits,
|
|
PreviousJustifiedCheckpoint: b.previousJustifiedCheckpoint,
|
|
CurrentJustifiedCheckpoint: b.currentJustifiedCheckpoint,
|
|
FinalizedCheckpoint: b.finalizedCheckpoint,
|
|
InactivityScores: inactivityScores,
|
|
CurrentSyncCommittee: b.currentSyncCommittee,
|
|
NextSyncCommittee: b.nextSyncCommittee,
|
|
LatestExecutionPayloadHeader: b.latestExecutionPayloadHeader,
|
|
LatestExecutionPayloadHeaderCapella: b.latestExecutionPayloadHeaderCapella,
|
|
NextWithdrawalIndex: b.nextWithdrawalIndex,
|
|
NextWithdrawalValidatorIndex: b.nextWithdrawalValidatorIndex,
|
|
}
|
|
return json.Marshal(marshalable)
|
|
}
|