From 9c6ccd67c179eab385d90d3b695a2adf9ca2eeee Mon Sep 17 00:00:00 2001 From: Jun Song <87601811+syjn99@users.noreply.github.com> Date: Wed, 6 Aug 2025 04:25:17 +0900 Subject: [PATCH] Add Fulu case for saveStatesEfficientInternal (#15553) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add Fulu case for saveStatesEfficientInternal * Add changelog --------- Co-authored-by: Radosław Kapka Co-authored-by: james-prysm <90280386+james-prysm@users.noreply.github.com> --- beacon-chain/db/kv/state.go | 22 +++++++++++++++++++ changelog/syjn99_save-state-efficient-fulu.md | 3 +++ 2 files changed, 25 insertions(+) create mode 100644 changelog/syjn99_save-state-efficient-fulu.md diff --git a/beacon-chain/db/kv/state.go b/beacon-chain/db/kv/state.go index 3e85ec0e47..cd21e7842e 100644 --- a/beacon-chain/db/kv/state.go +++ b/beacon-chain/db/kv/state.go @@ -253,6 +253,10 @@ func (s *Store) saveStatesEfficientInternal(ctx context.Context, tx *bolt.Tx, bl if err := s.processElectra(ctx, rawType, rt[:], bucket, valIdxBkt, validatorKeys[i]); err != nil { return err } + case *ethpb.BeaconStateFulu: + if err := s.processFulu(ctx, rawType, rt[:], bucket, valIdxBkt, validatorKeys[i]); err != nil { + return err + } default: return errors.New("invalid state type") } @@ -368,6 +372,24 @@ func (s *Store) processElectra(ctx context.Context, pbState *ethpb.BeaconStateEl return nil } +func (s *Store) processFulu(ctx context.Context, pbState *ethpb.BeaconStateFulu, rootHash []byte, bucket, valIdxBkt *bolt.Bucket, validatorKey []byte) error { + valEntries := pbState.Validators + pbState.Validators = make([]*ethpb.Validator, 0) + rawObj, err := pbState.MarshalSSZ() + if err != nil { + return err + } + encodedState := snappy.Encode(nil, append(fuluKey, rawObj...)) + if err := bucket.Put(rootHash, encodedState); err != nil { + return err + } + pbState.Validators = valEntries + if err := valIdxBkt.Put(rootHash, validatorKey); err != nil { + return err + } + return nil +} + func (s *Store) storeValidatorEntriesSeparately(ctx context.Context, tx *bolt.Tx, validatorsEntries map[string]*ethpb.Validator) error { valBkt := tx.Bucket(stateValidatorsBucket) for hashStr, validatorEntry := range validatorsEntries { diff --git a/changelog/syjn99_save-state-efficient-fulu.md b/changelog/syjn99_save-state-efficient-fulu.md new file mode 100644 index 0000000000..97788a0ce3 --- /dev/null +++ b/changelog/syjn99_save-state-efficient-fulu.md @@ -0,0 +1,3 @@ +### Added + +- Add Fulu case for `saveStatesEfficientInternal` \ No newline at end of file