Skip to content

Commit

Permalink
basic eip7805 support (FOCIL)
Browse files Browse the repository at this point in the history
  • Loading branch information
pk910 committed Feb 11, 2025
1 parent 455fe5d commit 904df11
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 2 deletions.
2 changes: 2 additions & 0 deletions clients/consensus/chainspec.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ type ChainSpec struct {
ElectraForkEpoch *uint64 `yaml:"ELECTRA_FORK_EPOCH"`
Eip7594ForkVersion phase0.Version `yaml:"EIP7594_FORK_VERSION" check-if-fork:"Eip7594ForkEpoch"`
Eip7594ForkEpoch *uint64 `yaml:"EIP7594_FORK_EPOCH"`
Eip7805ForkVersion phase0.Version `yaml:"EIP7805_FORK_VERSION" check-if-fork:"Eip7805ForkEpoch"`
Eip7805ForkEpoch *uint64 `yaml:"EIP7805_FORK_EPOCH"`
SecondsPerSlot time.Duration `yaml:"SECONDS_PER_SLOT"`
SlotsPerEpoch uint64 `yaml:"SLOTS_PER_EPOCH"`
EpochsPerHistoricalVector uint64 `yaml:"EPOCHS_PER_HISTORICAL_VECTOR"`
Expand Down
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -153,4 +153,6 @@ require (
rsc.io/tmplfunc v0.0.3 // indirect
)

replace github.com/attestantio/go-eth2-client => github.com/pk910/go-eth2-client v0.0.0-20250211153905-1124ee6e3b00

replace github.com/ethereum/go-ethereum => github.com/s1na/go-ethereum v0.0.0-20250103133732-7e1b0ba7e83f
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI=
github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI=
github.com/attestantio/go-eth2-client v0.24.0 h1:lGVbcnhlBwRglt1Zs56JOCgXVyLWKFZOmZN8jKhE7Ws=
github.com/attestantio/go-eth2-client v0.24.0/go.mod h1:/KTLN3WuH1xrJL7ZZrpBoWM1xCCihnFbzequD5L+83o=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bits-and-blooms/bitset v1.17.0 h1:1X2TS7aHz1ELcC0yU1y2stUs/0ig5oMU6STFZGrhvHI=
Expand Down Expand Up @@ -351,6 +349,8 @@ github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
github.com/pk910/dynamic-ssz v0.0.5 h1:VP9heGYUwzlpyhk28P2nCAzhvGsePJOOOO5vQMDh2qQ=
github.com/pk910/dynamic-ssz v0.0.5/go.mod h1:b6CrLaB2X7pYA+OSEEbkgXDEcRnjLOZIxZTsMuO/Y9c=
github.com/pk910/go-eth2-client v0.0.0-20250211153905-1124ee6e3b00 h1:UQPOhVdHkvhICZhBqt6YTCTXUthZ7Wp69EOch1ChdbA=
github.com/pk910/go-eth2-client v0.0.0-20250211153905-1124ee6e3b00/go.mod h1:/KTLN3WuH1xrJL7ZZrpBoWM1xCCihnFbzequD5L+83o=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
Expand Down
8 changes: 8 additions & 0 deletions handlers/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,14 @@ func buildIndexPageData() (*models.IndexPageData, time.Duration) {
Active: uint64(currentEpoch) >= *specs.Eip7594ForkEpoch,
})
}
if specs.Eip7805ForkEpoch != nil && *specs.Eip7805ForkEpoch < uint64(18446744073709551615) {
pageData.NetworkForks = append(pageData.NetworkForks, &models.IndexPageDataForks{
Name: "eip7805",
Epoch: *specs.Eip7805ForkEpoch,
Version: specs.Eip7805ForkVersion[:],
Active: uint64(currentEpoch) >= *specs.Eip7805ForkEpoch,
})
}

// load recent epochs
buildIndexPageRecentEpochsData(pageData, currentEpoch, finalizedEpoch, justifiedEpoch, recentEpochCount)
Expand Down
22 changes: 22 additions & 0 deletions handlers/slot.go
Original file line number Diff line number Diff line change
Expand Up @@ -688,6 +688,28 @@ func getSlotPageBlockData(blockData *services.CombinedBlockResponse, epochStatsV
BlockNumber: uint64(executionPayload.BlockNumber),
}
getSlotPageTransactions(pageData, executionPayload.Transactions)
case spec.DataVersionEip7805:
if blockData.Block.Eip7805 == nil {
break
}
executionPayload := blockData.Block.Eip7805.Message.Body.ExecutionPayload
pageData.ExecutionData = &models.SlotPageExecutionData{
ParentHash: executionPayload.ParentHash[:],
FeeRecipient: executionPayload.FeeRecipient[:],
StateRoot: executionPayload.StateRoot[:],
ReceiptsRoot: executionPayload.ReceiptsRoot[:],
LogsBloom: executionPayload.LogsBloom[:],
Random: executionPayload.PrevRandao[:],
GasLimit: uint64(executionPayload.GasLimit),
GasUsed: uint64(executionPayload.GasUsed),
Timestamp: uint64(executionPayload.Timestamp),
Time: time.Unix(int64(executionPayload.Timestamp), 0),
ExtraData: executionPayload.ExtraData,
BaseFeePerGas: executionPayload.BaseFeePerGas.Uint64(),
BlockHash: executionPayload.BlockHash[:],
BlockNumber: uint64(executionPayload.BlockNumber),
}
getSlotPageTransactions(pageData, executionPayload.Transactions)
}
}

Expand Down
36 changes: 36 additions & 0 deletions indexer/beacon/block_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ func MarshalVersionedSignedBeaconBlockSSZ(dynSsz *dynssz.DynSsz, block *spec.Ver
case spec.DataVersionElectra:
version = uint64(block.Version)
ssz, err = dynSsz.MarshalSSZ(block.Electra)
case spec.DataVersionEip7805:
version = uint64(block.Version)
ssz, err = dynSsz.MarshalSSZ(block.Eip7805)
default:
err = fmt.Errorf("unknown block version")
}
Expand Down Expand Up @@ -110,6 +113,11 @@ func unmarshalVersionedSignedBeaconBlockSSZ(dynSsz *dynssz.DynSsz, version uint6
if err := dynSsz.UnmarshalSSZ(block.Electra, ssz); err != nil {
return nil, fmt.Errorf("failed to decode electra signed beacon block: %v", err)
}
case spec.DataVersionEip7805:
block.Eip7805 = &electra.SignedBeaconBlock{}
if err := dynSsz.UnmarshalSSZ(block.Eip7805, ssz); err != nil {
return nil, fmt.Errorf("failed to decode eip7805 signed beacon block: %v", err)
}
default:
return nil, fmt.Errorf("unknown block version")
}
Expand Down Expand Up @@ -137,6 +145,9 @@ func MarshalVersionedSignedBeaconBlockJson(block *spec.VersionedSignedBeaconBloc
case spec.DataVersionElectra:
version = uint64(block.Version)
jsonRes, err = block.Electra.MarshalJSON()
case spec.DataVersionEip7805:
version = uint64(block.Version)
jsonRes, err = block.Eip7805.MarshalJSON()
default:
err = fmt.Errorf("unknown block version")
}
Expand Down Expand Up @@ -185,6 +196,11 @@ func unmarshalVersionedSignedBeaconBlockJson(version uint64, ssz []byte) (*spec.
if err := block.Electra.UnmarshalJSON(ssz); err != nil {
return nil, fmt.Errorf("failed to decode electra signed beacon block: %v", err)
}
case spec.DataVersionEip7805:
block.Eip7805 = &electra.SignedBeaconBlock{}
if err := block.Eip7805.UnmarshalJSON(ssz); err != nil {
return nil, fmt.Errorf("failed to decode eip7805 signed beacon block: %v", err)
}
default:
return nil, fmt.Errorf("unknown block version")
}
Expand Down Expand Up @@ -218,6 +234,12 @@ func getBlockExecutionExtraData(v *spec.VersionedSignedBeaconBlock) ([]byte, err
}

return v.Electra.Message.Body.ExecutionPayload.ExtraData, nil
case spec.DataVersionEip7805:
if v.Eip7805 == nil || v.Eip7805.Message == nil || v.Eip7805.Message.Body == nil || v.Eip7805.Message.Body.ExecutionPayload == nil {
return nil, errors.New("no eip7805 block")
}

return v.Eip7805.Message.Body.ExecutionPayload.ExtraData, nil
default:
return nil, errors.New("unknown version")
}
Expand Down Expand Up @@ -262,6 +284,12 @@ func getStateRandaoMixes(v *spec.VersionedBeaconState) ([]phase0.Root, error) {
}

return v.Electra.RANDAOMixes, nil
case spec.DataVersionEip7805:
if v.Eip7805 == nil || v.Eip7805.RANDAOMixes == nil {
return nil, errors.New("no eip7805 block")
}

return v.Eip7805.RANDAOMixes, nil
default:
return nil, errors.New("unknown version")
}
Expand All @@ -282,6 +310,8 @@ func getStateDepositIndex(state *spec.VersionedBeaconState) uint64 {
return state.Deneb.ETH1DepositIndex
case spec.DataVersionElectra:
return state.Electra.ETH1DepositIndex
case spec.DataVersionEip7805:
return state.Eip7805.ETH1DepositIndex
}
return 0
}
Expand Down Expand Up @@ -321,6 +351,12 @@ func getStateCurrentSyncCommittee(v *spec.VersionedBeaconState) ([]phase0.BLSPub
}

return v.Electra.CurrentSyncCommittee.Pubkeys, nil
case spec.DataVersionEip7805:
if v.Eip7805 == nil || v.Eip7805.CurrentSyncCommittee == nil {
return nil, errors.New("no eip7805 block")
}

return v.Eip7805.CurrentSyncCommittee.Pubkeys, nil
default:
return nil, errors.New("unknown version")
}
Expand Down

0 comments on commit 904df11

Please sign in to comment.