Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ redis-cli DEL boost-relay/sepolia:validators-registration boost-relay/sepolia:va
* `DISABLE_LOWPRIO_BUILDERS` - reject block submissions by low-prio builders
* `FORCE_GET_HEADER_204` - force 204 as getHeader response
* `ENABLE_IGNORABLE_VALIDATION_ERRORS` - enable ignorable validation errors
* `USE_V2_PUBLISH_BLOCK_ENDPOINT` - uses the v2 publish block endpoint on the beacon node

#### Development Environment Variables

Expand Down
24 changes: 21 additions & 3 deletions beaconclient/prod_beacon_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"encoding/json"
"fmt"
"net/http"
"os"
"time"

"github.com/attestantio/go-eth2-client/spec/capella"
Expand All @@ -16,14 +17,26 @@ import (
type ProdBeaconInstance struct {
log *logrus.Entry
beaconURI string

// feature flags
ffUseV2PublishBlockEndpoint bool
}

func NewProdBeaconInstance(log *logrus.Entry, beaconURI string) *ProdBeaconInstance {
_log := log.WithFields(logrus.Fields{
"component": "beaconInstance",
"beaconURI": beaconURI,
})
return &ProdBeaconInstance{_log, beaconURI}

client := &ProdBeaconInstance{_log, beaconURI, false}

// feature flags
if os.Getenv("USE_V2_PUBLISH_BLOCK_ENDPOINT") != "" {
_log.Warn("env: USE_V2_PUBLISH_BLOCK_ENDPOINT: use the v2 publish block endpoint")
client.ffUseV2PublishBlockEndpoint = true
}

return client
}

// HeadEventData represents the data of a head event
Expand Down Expand Up @@ -257,9 +270,14 @@ func (c *ProdBeaconInstance) GetURI() string {
}

func (c *ProdBeaconInstance) PublishBlock(block *common.SignedBeaconBlock, broadcastMode BroadcastMode) (code int, err error) {
uri := fmt.Sprintf("%s/eth/v2/beacon/blocks?broadcast_validation=%s", c.beaconURI, broadcastMode.String())
var uri string
if c.ffUseV2PublishBlockEndpoint {
uri = fmt.Sprintf("%s/eth/v2/beacon/blocks?broadcast_validation=%s", c.beaconURI, broadcastMode.String())
} else {
uri = fmt.Sprintf("%s/eth/v1/beacon/blocks", c.beaconURI)
}
headers := http.Header{}
headers.Add("Eth-Consensus-Version", common.ForkVersionStringCapella)
headers.Add("Eth-Consensus-Version", common.ForkVersionStringCapella) // optional in v1, required in v2
return fetchBeacon(http.MethodPost, uri, block, nil, nil, headers)
}

Expand Down
11 changes: 3 additions & 8 deletions services/api/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,6 @@ var (
ErrRelayPubkeyMismatch = errors.New("relay pubkey does not match existing one")
ErrServerAlreadyStarted = errors.New("server was already started")
ErrBuilderAPIWithoutSecretKey = errors.New("cannot start builder API without secret key")
ErrMismatchedForkVersions = errors.New("can not find matching fork versions as retrieved from beacon node")
ErrMissingForkVersions = errors.New("invalid fork version from beacon node")
)

var (
Expand Down Expand Up @@ -408,6 +406,7 @@ func (api *RelayAPI) StartServer() (err error) {
if err != nil {
return err
}

var foundCapellaEpoch, foundDenebEpoch bool
for _, fork := range forkSchedule.Data {
log.Infof("forkSchedule: version=%s / epoch=%d", fork.CurrentVersion, fork.Epoch)
Expand All @@ -421,14 +420,10 @@ func (api *RelayAPI) StartServer() (err error) {
}
}

if !foundCapellaEpoch || !foundDenebEpoch {
return ErrMissingForkVersions
}

// Print fork version information
if hasReachedFork(currentSlot, api.denebEpoch) {
if foundDenebEpoch && hasReachedFork(currentSlot, api.denebEpoch) {
log.Infof("deneb fork detected (currentEpoch: %d / denebEpoch: %d)", common.SlotToEpoch(currentSlot), api.denebEpoch)
} else if hasReachedFork(currentSlot, api.capellaEpoch) {
} else if foundCapellaEpoch && hasReachedFork(currentSlot, api.capellaEpoch) {
log.Infof("capella fork detected (currentEpoch: %d / capellaEpoch: %d)", common.SlotToEpoch(currentSlot), api.capellaEpoch)
}

Expand Down