Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
4a64354
fix: resolve case sensitivity issue with funding.json
dennis-tra Apr 22, 2025
a0bc3ba
filecoin support: initial commit
dennis-tra Apr 22, 2025
4867ad2
filecoin: parse gossipsub messages
dennis-tra Apr 23, 2025
3400b12
filecoin: parse f3 messages
dennis-tra Apr 25, 2025
69e709a
filecoin: remove dial concurrency parameter
dennis-tra Apr 28, 2025
9ce82ef
filecoin: use configuration profiles
dennis-tra Apr 28, 2025
c448371
fix: typos
dennis-tra Apr 28, 2025
a6e7de2
go mod tidy
dennis-tra Apr 28, 2025
feabc20
filecoin: remove log message
dennis-tra Apr 28, 2025
baa83b1
filecoin: update message validation and metrics
dennis-tra Apr 29, 2025
90a542f
add: noop datastream
dennis-tra Apr 30, 2025
0670c47
filecoin: update config plumbing
dennis-tra Apr 30, 2025
802d42f
go mod tidy
dennis-tra Apr 30, 2025
5e43011
staticcheck: remove unused code
dennis-tra Apr 30, 2025
a8a0076
filecoin: update agent version parsing
dennis-tra Apr 30, 2025
e907e0e
filecoin: improve discovery error handling
dennis-tra Apr 30, 2025
85e73ef
lower S3 submission log level
dennis-tra Apr 30, 2025
2165eff
fix: filecoin f3 message decoding
dennis-tra Apr 30, 2025
f1bef7a
filecoin: increase validation queue size
dennis-tra Apr 30, 2025
e53c982
filecoin: limit lookup duration
dennis-tra May 5, 2025
d29f178
filecoin: add lookups counter metric
dennis-tra May 5, 2025
d5d76f4
require fork version and root hash
dennis-tra May 5, 2025
7301fb7
config: update gnosis electra epoch
dennis-tra May 5, 2025
5eed416
filecoin: fix discovery logic
dennis-tra May 5, 2025
f373a4b
add gossip px
cortze May 9, 2025
f3f403f
add Px event to s3 types
cortze May 9, 2025
ee67e6e
filecoin: add discovery log messages
dennis-tra May 13, 2025
fbdb834
filecoin: refactor discovery logging
dennis-tra May 14, 2025
49593b5
update: go-libp2p
dennis-tra May 15, 2025
ef0eeac
update: go-libp2p-kad-dht
dennis-tra May 15, 2025
8d22fca
use: go-yamux fork
dennis-tra May 19, 2025
b809b44
fix: don't measure own score
dennis-tra Jun 8, 2025
a6b4593
chore: add cli cmd to disable disc actor
kasteph Jun 10, 2025
c3bf65f
filecoin: update bootstrappers
dennis-tra Jun 10, 2025
406ff15
host: log mesh metrics peers
dennis-tra Jun 10, 2025
29ca673
fix(filecoin): default discovery actor value
dennis-tra Jun 10, 2025
32b73a0
filecoin: remove manifests subscription
dennis-tra Jun 10, 2025
502ab5c
filecoin: log discovery interval
dennis-tra Jun 10, 2025
7b6e9ed
fix: reset topic metrics
dennis-tra Jun 10, 2025
1e06870
bump github.com/filecoin-project/go-f3 dep
dennis-tra Jun 10, 2025
476cfb9
filecoin: remove wrong discv5 reference
dennis-tra Jun 12, 2025
9940c7b
filecoin: drastically increase pubsub validate queue size
dennis-tra Jun 12, 2025
5199923
filecoin: make validate queue size configurable
dennis-tra Jun 15, 2025
cd12d7a
feat: add reason to reject msg metric
dennis-tra Jun 15, 2025
849616d
feat(eth): add support for subscribing to custom topics (#62)
mattevans May 13, 2025
d6b4efb
feat(eth/reqresp): Add metric for received goodbye messages (#64)
mattevans Jun 4, 2025
f34f1ae
fix: staticcheck complaint
dennis-tra Jun 23, 2025
c5d858d
fix: px parquet traces test
dennis-tra Jun 23, 2025
f27254a
add: funding.json
dennis-tra Jul 7, 2025
e1f34f8
filecoin: update readme
dennis-tra Jul 14, 2025
0445f8e
update: README ToC
dennis-tra Jul 14, 2025
e289381
Update the Readme (#69)
cortze Aug 5, 2025
4c344c0
chore: update .github/workflows/go-test.yml (#70)
web3-bot Aug 13, 2025
641c3e9
Fix Eth connectivity issues (#71)
cortze Aug 21, 2025
8cc2967
add optimism support
dennis-tra Jul 14, 2025
a8dd2b7
fix: print correct op configuration on startup
dennis-tra Aug 22, 2025
e3514ea
remove: unused constants
dennis-tra Aug 22, 2025
2490586
Update README.md
dennis-tra Aug 22, 2025
712c7b6
feat: add Fulu fork support with BPO-aware fork digest calculation
mattevans Aug 25, 2025
e1b4080
WIP
cortze Oct 29, 2025
42d9971
working prototype
cortze Oct 30, 2025
fdc1d3d
tidy work
cortze Oct 30, 2025
7fa0d14
remove reqs by root and range
cortze Oct 30, 2025
f82ab03
more changes
cortze Oct 30, 2025
f305790
address comments from dennis
cortze Oct 31, 2025
1f75047
update go-ymux + missing stream reset
cortze Oct 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 66 additions & 16 deletions cmd/hermes/cmd_eth.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"fmt"
"log/slog"

"github.com/OffchainLabs/prysm/v6/beacon-chain/core/signing"
"github.com/OffchainLabs/prysm/v6/beacon-chain/p2p"
"github.com/OffchainLabs/prysm/v6/beacon-chain/p2p/encoder"
"github.com/OffchainLabs/prysm/v6/config/params"
Expand Down Expand Up @@ -49,6 +48,8 @@ var ethConfig = &struct {
SubnetBlobSidecarCount uint64
SubnetBlobSidecarStart uint64
SubnetBlobSidecarEnd uint64
SubnetDataColumnsType string
SubnetDataColumnsCount uint64
SubscriptionTopics []string
}{
PrivateKeyStr: "", // unset means it'll be generated
Expand All @@ -65,21 +66,29 @@ var ethConfig = &struct {
BootnodesURL: "",
DepositContractBlockURL: "",
// Default subnet configuration values.
SubnetAttestationType: "all",
SubnetAttestationType: "random",
SubnetAttestationSubnets: []int64{},
SubnetAttestationCount: 0,
SubnetAttestationCount: 2,
SubnetAttestationStart: 0,
SubnetAttestationEnd: 0,
SubnetSyncCommitteeType: "all",
SubnetSyncCommitteeType: "random",
SubnetSyncCommitteeSubnets: []int64{},
SubnetSyncCommitteeCount: 0,
SubnetSyncCommitteeCount: 1,
SubnetSyncCommitteeStart: 0,
SubnetSyncCommitteeEnd: 0,
SubnetBlobSidecarType: "all",
SubnetBlobSidecarType: "random",
SubnetBlobSidecarSubnets: []int64{},
SubnetBlobSidecarCount: 0,
SubnetBlobSidecarCount: 2,
SubnetBlobSidecarStart: 0,
SubnetBlobSidecarEnd: 0,
SubnetDataColumnsType: "random",
SubnetDataColumnsCount: 4,
SubscriptionTopics: []string{
"beacon_attestations",
"beacon_block",
"sync_committee",
"data_column_sidecar",
},
}

var cmdEth = &cli.Command{
Expand Down Expand Up @@ -313,6 +322,20 @@ var cmdEthFlags = []cli.Flag{
return nil
},
},
&cli.StringFlag{
Name: "subnet.datacolumn.type",
EnvVars: []string{"HERMES_ETH_SUBNET_DATACOLUMN_TYPE"},
Usage: "Subnet selection strategy for data column topics (all, random)",
Value: ethConfig.SubnetDataColumnsType,
Destination: &ethConfig.SubnetDataColumnsType,
},
&cli.Uint64Flag{
Name: "subnet.datacolumn.count",
EnvVars: []string{"HERMES_ETH_SUBNET_DATACOLUMN_COUNT"},
Usage: "Number of random for data columns to select when type=random",
Value: ethConfig.SubnetDataColumnsCount,
Destination: &ethConfig.SubnetDataColumnsCount,
},
}

func cmdEthAction(c *cli.Context) error {
Expand Down Expand Up @@ -348,27 +371,23 @@ func cmdEthAction(c *cli.Context) error {
config = c
}

// Overriding configuration so that functions like ComputForkDigest take the
// correct input data from the global configuration.
// Overriding configuration so that params.ForkDigest and other functions
// use the correct network configuration.
params.OverrideBeaconConfig(config.Beacon)
params.OverrideBeaconNetworkConfig(config.Network)

genesisRoot := config.Genesis.GenesisValidatorRoot
genesisTime := config.Genesis.GenesisTime

// compute fork version and fork digest
currentSlot := slots.Since(genesisTime)
currentSlot := slots.CurrentSlot(genesisTime)
currentEpoch := slots.ToEpoch(currentSlot)

currentForkVersion, err := eth.GetCurrentForkVersion(currentEpoch, config.Beacon)
if err != nil {
return fmt.Errorf("compute fork version for epoch %d: %w", currentEpoch, err)
}

forkDigest, err := signing.ComputeForkDigest(currentForkVersion[:], genesisRoot)
if err != nil {
return fmt.Errorf("create fork digest (%s, %x): %w", genesisTime, genesisRoot, err)
}
forkDigest := params.ForkDigest(currentEpoch)

cfg := &eth.NodeConfig{
GenesisConfig: config.Genesis,
Expand Down Expand Up @@ -450,7 +469,13 @@ func createSubnetConfigs() map[string]*eth.SubnetConfig {
"type", ethConfig.SubnetBlobSidecarType,
"config", subnetConfigs[p2p.GossipBlobSidecarMessage])
}

// Configure das column sidecars as specified
if configureDataColumnSubnet() {
subnetConfigs[p2p.GossipDataColumnSidecarMessage] = createDataColumnSubnetConfig()
slog.Info("Configured data column subnet",
"type", ethConfig.SubnetDataColumnsType,
"config", subnetConfigs[p2p.GossipDataColumnSidecarMessage])
}
return subnetConfigs
}

Expand Down Expand Up @@ -493,6 +518,11 @@ func configureBlobSidecarSubnet() bool {
return true
}

// configureDataColumnSubnet checks if blob sidecar subnet configuration is provided.
func configureDataColumnSubnet() bool {
return true
}

// createAttestationSubnetConfig creates a SubnetConfig for attestation topics.
func createAttestationSubnetConfig() *eth.SubnetConfig {
config := &eth.SubnetConfig{
Expand Down Expand Up @@ -574,6 +604,26 @@ func createBlobSidecarSubnetConfig() *eth.SubnetConfig {
return config
}

// createDataColumnSubnetConfig creates a SubnetConfig for data column topics.
func createDataColumnSubnetConfig() *eth.SubnetConfig {
// edgy case, as we need the node ID to compute the subnets (unless we subscribe to all)
// either way, compose this afterwards at the eth-chain level
config := &eth.SubnetConfig{
Type: eth.SubnetSelectionType(ethConfig.SubnetDataColumnsType),
}
switch config.Type {
case eth.SubnetAll:
config.Count = eth.GlobalBeaconConfig.DataColumnSidecarSubnetCount
case eth.SubnetRandom:
// ensure that we don't get real random subnets (we compute them at the Chain)
config.Count = ethConfig.SubnetDataColumnsCount
default:
slog.Warn("invalid type given for cgc, applying default custody of 4 data-columns")
config.Count = eth.GlobalBeaconConfig.CustodyRequirement
}
return config
}

// validateKeyFlag verifies that if a key was given it is in hex format and
// can be decoded.
func validateKeyFlag(c *cli.Context, s string) error {
Expand Down
11 changes: 6 additions & 5 deletions cmd/hermes/cmd_eth_chains.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"log/slog"
"math"

"github.com/OffchainLabs/prysm/v6/beacon-chain/core/signing"
"github.com/OffchainLabs/prysm/v6/config/params"
"github.com/urfave/cli/v2"

Expand Down Expand Up @@ -35,13 +34,18 @@ func cmdEthChainsAction(c *cli.Context) error {
}
slog.Info(chain)

// Override params config for this network to get correct fork digests.
params.OverrideBeaconConfig(config.Beacon)
params.OverrideBeaconNetworkConfig(config.Network)

forkVersions := [][]byte{
config.Beacon.GenesisForkVersion,
config.Beacon.AltairForkVersion,
config.Beacon.BellatrixForkVersion,
config.Beacon.CapellaForkVersion,
config.Beacon.DenebForkVersion,
config.Beacon.ElectraForkVersion,
config.Beacon.FuluForkVersion,
}

for _, forkVersion := range forkVersions {
Expand All @@ -59,10 +63,7 @@ func cmdEthChainsAction(c *cli.Context) error {
continue
}

digest, err := signing.ComputeForkDigest(forkVersion, config.Genesis.GenesisValidatorRoot)
if err != nil {
return err
}
digest := params.ForkDigest(epoch)

slog.Info(fmt.Sprintf("- %s: 0x%x (epoch %d)", forkName, digest, epoch))
}
Expand Down
3 changes: 1 addition & 2 deletions cmd/hermes/cmd_op.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@ import (
"log/slog"
"time"

"github.com/probe-lab/hermes/tele"

"github.com/ethereum/go-ethereum/p2p/enode"
"github.com/urfave/cli/v2"
"go.opentelemetry.io/otel"

"github.com/probe-lab/hermes/host"
"github.com/probe-lab/hermes/op"
"github.com/probe-lab/hermes/tele"
)

var opConfig = &struct {
Expand Down
Loading