From f7e00116d02e8a1bf5ab5f10175ccef1c0c50ce3 Mon Sep 17 00:00:00 2001 From: faheelsattar Date: Sat, 26 Jul 2025 23:28:29 +0200 Subject: [PATCH 1/7] add dynssz for get header --- go.mod | 4 ++++ go.sum | 8 ++++++-- server/get_header.go | 24 ++++++++++++++---------- server/service.go | 10 ++++++++++ 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 93beee7f..c96f1e7a 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 github.com/holiman/uint256 v1.3.2 + github.com/pk910/dynamic-ssz v0.0.4 github.com/prysmaticlabs/go-bitfield v0.0.0-20240618144021-706c95b2dd15 github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.10.0 @@ -32,6 +33,7 @@ require ( github.com/supranational/blst v0.3.14 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect golang.org/x/sync v0.13.0 // indirect + gopkg.in/Knetic/govaluate.v3 v3.0.0 // indirect rsc.io/tmplfunc v0.0.3 // indirect ) @@ -60,3 +62,5 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/attestantio/go-eth2-client => github.com/jacobkaufmann/go-eth2-client v0.0.0-20250529231327-5f241b4aa8a4 diff --git a/go.sum b/go.sum index f2ceecbe..de141e0a 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,6 @@ github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjC github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= github.com/attestantio/go-builder-client v0.6.1 h1:fn6PC8aDWx2YbptstR1JKP8NyakiNJJTiOE5f9N0z5Q= github.com/attestantio/go-builder-client v0.6.1/go.mod h1:f8wi3HzuPxfJoi2PirpJK3yZhte4SavDgKJbRrKoB1Q= -github.com/attestantio/go-eth2-client v0.25.0 h1:wLQxoteGCbTE/vKCMASx1ze+Zm9rcqtltRnblaLJup4= -github.com/attestantio/go-eth2-client v0.25.0/go.mod h1:fvULSL9WtNskkOB4i+Yyr6BKpNHXvmpGZj9969fCrfY= github.com/bits-and-blooms/bitset v1.22.0 h1:Tquv9S8+SGaS3EhyA+up3FXzmkhxPGjQQCkcs2uw7w4= github.com/bits-and-blooms/bitset v1.22.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= @@ -59,6 +57,8 @@ github.com/huandu/go-clone v1.7.2 h1:3+Aq0Ed8XK+zKkLjE2dfHg0XrpIfcohBE1K+c8Usxoo github.com/huandu/go-clone v1.7.2/go.mod h1:ReGivhG6op3GYr+UY3lS6mxjKp7MIGTknuU5TbTVaXE= github.com/huandu/go-clone/generic v1.6.0 h1:Wgmt/fUZ28r16F2Y3APotFD59sHk1p78K0XLdbUYN5U= github.com/huandu/go-clone/generic v1.6.0/go.mod h1:xgd9ZebcMsBWWcBx5mVMCoqMX24gLWr5lQicr+nVXNs= +github.com/jacobkaufmann/go-eth2-client v0.0.0-20250529231327-5f241b4aa8a4 h1:swIjpXA+H87vwRO0Wm99BBPq2VmHNlTiYmQqsQCTA6I= +github.com/jacobkaufmann/go-eth2-client v0.0.0-20250529231327-5f241b4aa8a4/go.mod h1:fvULSL9WtNskkOB4i+Yyr6BKpNHXvmpGZj9969fCrfY= github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -81,6 +81,8 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/pk910/dynamic-ssz v0.0.4 h1:DT29+1055tCEPCaR4V/ez+MOKW7BzBsmjyFvBRqx0ME= +github.com/pk910/dynamic-ssz v0.0.4/go.mod h1:b6CrLaB2X7pYA+OSEEbkgXDEcRnjLOZIxZTsMuO/Y9c= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -131,6 +133,8 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +gopkg.in/Knetic/govaluate.v3 v3.0.0 h1:18mUyIt4ZlRlFZAAfVetz4/rzlJs9yhN+U02F4u1AOc= +gopkg.in/Knetic/govaluate.v3 v3.0.0/go.mod h1:csKLBORsPbafmSCGTEh3U7Ozmsuq8ZSIlKk1bcqph0E= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/server/get_header.go b/server/get_header.go index 0149f2fa..c7099571 100644 --- a/server/get_header.go +++ b/server/get_header.go @@ -20,6 +20,7 @@ import ( "github.com/flashbots/mev-boost/config" "github.com/flashbots/mev-boost/server/types" "github.com/google/uuid" + dynssz "github.com/pk910/dynamic-ssz" "github.com/sirupsen/logrus" ) @@ -133,7 +134,7 @@ func (m *BoostService) getHeader(log *logrus.Entry, slot phase0.Slot, pubkey, pa // Decode bid bid := new(builderSpec.VersionedSignedBuilderBid) - err = decodeBid(respBytes, respContentType, respEthConsensusVersion, bid) + err = m.decodeBid(respBytes, respContentType, respEthConsensusVersion, bid) if err != nil { log.WithError(err).Warn("error decoding bid") return @@ -257,28 +258,30 @@ func (m *BoostService) getHeader(log *logrus.Entry, slot phase0.Slot, pubkey, pa } // decodeBid decodes a bid by SSZ or JSON, depending on the provided respContentType -func decodeBid(respBytes []byte, respContentType, ethConsensusVersion string, bid *builderSpec.VersionedSignedBuilderBid) error { +func (m *BoostService) decodeBid(respBytes []byte, respContentType, ethConsensusVersion string, bid *builderSpec.VersionedSignedBuilderBid) error { switch respContentType { case MediaTypeOctetStream: if ethConsensusVersion != "" { // Do SSZ decoding + dynSSZ := dynssz.NewDynSsz(m.preset) + switch ethConsensusVersion { case EthConsensusVersionBellatrix: bid.Version = spec.DataVersionBellatrix bid.Bellatrix = new(builderApiBellatrix.SignedBuilderBid) - return bid.Bellatrix.UnmarshalSSZ(respBytes) + return dynSSZ.UnmarshalSSZ(bid.Bellatrix, respBytes) case EthConsensusVersionCapella: bid.Version = spec.DataVersionCapella bid.Capella = new(builderApiCapella.SignedBuilderBid) - return bid.Capella.UnmarshalSSZ(respBytes) + return dynSSZ.UnmarshalSSZ(bid.Capella, respBytes) case EthConsensusVersionDeneb: bid.Version = spec.DataVersionDeneb bid.Deneb = new(builderApiDeneb.SignedBuilderBid) - return bid.Deneb.UnmarshalSSZ(respBytes) + return dynSSZ.UnmarshalSSZ(bid.Deneb, respBytes) case EthConsensusVersionElectra: bid.Version = spec.DataVersionElectra bid.Electra = new(builderApiElectra.SignedBuilderBid) - return bid.Electra.UnmarshalSSZ(respBytes) + return dynSSZ.UnmarshalSSZ(bid.Electra, respBytes) default: return errInvalidForkVersion } @@ -309,19 +312,20 @@ func (m *BoostService) respondGetHeaderSSZ(w http.ResponseWriter, result *bidRes // Serialize the response var err error var sszData []byte + dynSSZ := dynssz.NewDynSsz(m.preset) switch result.response.Version { case spec.DataVersionBellatrix: w.Header().Set(HeaderEthConsensusVersion, EthConsensusVersionBellatrix) - sszData, err = result.response.Bellatrix.MarshalSSZ() + sszData, err = dynSSZ.MarshalSSZ(result.response.Bellatrix) case spec.DataVersionCapella: w.Header().Set(HeaderEthConsensusVersion, EthConsensusVersionCapella) - sszData, err = result.response.Capella.MarshalSSZ() + sszData, err = dynSSZ.MarshalSSZ(result.response.Capella) case spec.DataVersionDeneb: w.Header().Set(HeaderEthConsensusVersion, EthConsensusVersionDeneb) - sszData, err = result.response.Deneb.MarshalSSZ() + sszData, err = dynSSZ.MarshalSSZ(result.response.Deneb) case spec.DataVersionElectra: w.Header().Set(HeaderEthConsensusVersion, EthConsensusVersionElectra) - sszData, err = result.response.Electra.MarshalSSZ() + sszData, err = dynSSZ.MarshalSSZ(result.response.Electra) case spec.DataVersionUnknown, spec.DataVersionPhase0, spec.DataVersionAltair: err = errInvalidForkVersion } diff --git a/server/service.go b/server/service.go index 92ac1401..318f81b4 100644 --- a/server/service.go +++ b/server/service.go @@ -13,6 +13,7 @@ import ( "sync/atomic" "time" + eth2client "github.com/attestantio/go-eth2-client" "github.com/attestantio/go-eth2-client/spec/phase0" "github.com/flashbots/go-boost-utils/ssz" "github.com/flashbots/go-utils/httplogger" @@ -63,6 +64,7 @@ type BoostServiceOpts struct { RequestTimeoutGetPayload time.Duration RequestTimeoutRegVal time.Duration RequestMaxRetries int + minimalPreset bool } // BoostService - the mev-boost service @@ -86,6 +88,8 @@ type BoostService struct { slotUID *slotUID slotUIDLock sync.Mutex + + preset map[string]interface{} } // NewBoostService created a new BoostService @@ -99,6 +103,11 @@ func NewBoostService(opts BoostServiceOpts) (*BoostService, error) { return nil, err } + preset := eth2client.MainnetPreset + if opts.minimalPreset { + preset = eth2client.MinimalPreset + } + return &BoostService{ listenAddr: opts.ListenAddr, relays: opts.Relays, @@ -108,6 +117,7 @@ func NewBoostService(opts BoostServiceOpts) (*BoostService, error) { genesisTime: opts.GenesisTime, bids: make(map[string]bidResp), slotUID: &slotUID{}, + preset: preset, builderSigningDomain: builderSigningDomain, httpClientGetHeader: http.Client{ From b78ee68245879467e2bbe8e3be649eecb975b8ea Mon Sep 17 00:00:00 2001 From: faheelsattar Date: Sun, 27 Jul 2025 01:10:53 +0200 Subject: [PATCH 2/7] add dynssz for get payload --- go.mod | 5 +++-- go.sum | 8 ++++---- server/get_header.go | 2 +- server/get_payload.go | 37 +++++++++++++++++++++---------------- server/utils.go | 6 ++++-- 5 files changed, 33 insertions(+), 25 deletions(-) diff --git a/go.mod b/go.mod index c96f1e7a..bae10aba 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 github.com/holiman/uint256 v1.3.2 - github.com/pk910/dynamic-ssz v0.0.4 + github.com/pk910/dynamic-ssz v1.0.1 github.com/prysmaticlabs/go-bitfield v0.0.0-20240618144021-706c95b2dd15 github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.10.0 @@ -19,6 +19,7 @@ require ( require ( github.com/bits-and-blooms/bitset v1.22.0 // indirect + github.com/casbin/govaluate v1.8.0 // indirect github.com/consensys/bavard v0.1.30 // indirect github.com/consensys/gnark-crypto v0.17.0 // indirect github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect @@ -29,11 +30,11 @@ require ( github.com/goccy/go-yaml v1.17.1 // indirect github.com/gofrs/flock v0.12.1 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect + github.com/prysmaticlabs/gohashtree v0.0.4-beta // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/supranational/blst v0.3.14 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect golang.org/x/sync v0.13.0 // indirect - gopkg.in/Knetic/govaluate.v3 v3.0.0 // indirect rsc.io/tmplfunc v0.0.3 // indirect ) diff --git a/go.sum b/go.sum index de141e0a..78192f49 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ github.com/attestantio/go-builder-client v0.6.1 h1:fn6PC8aDWx2YbptstR1JKP8NyakiN github.com/attestantio/go-builder-client v0.6.1/go.mod h1:f8wi3HzuPxfJoi2PirpJK3yZhte4SavDgKJbRrKoB1Q= github.com/bits-and-blooms/bitset v1.22.0 h1:Tquv9S8+SGaS3EhyA+up3FXzmkhxPGjQQCkcs2uw7w4= github.com/bits-and-blooms/bitset v1.22.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/casbin/govaluate v1.8.0 h1:1dUaV/I0LFP2tcY1uNQEb6wBCbp8GMTcC/zhwQDWvZo= +github.com/casbin/govaluate v1.8.0/go.mod h1:G/UnbIjZk/0uMNaLwZZmFQrR72tYRZWQkO70si/iR7A= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/consensys/bavard v0.1.30 h1:wwAj9lSnMLFXjEclKwyhf7Oslg8EoaFz9u1QGgt0bsk= @@ -81,8 +83,8 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/pk910/dynamic-ssz v0.0.4 h1:DT29+1055tCEPCaR4V/ez+MOKW7BzBsmjyFvBRqx0ME= -github.com/pk910/dynamic-ssz v0.0.4/go.mod h1:b6CrLaB2X7pYA+OSEEbkgXDEcRnjLOZIxZTsMuO/Y9c= +github.com/pk910/dynamic-ssz v1.0.1 h1:fXdon6tqkyw2ClKG8DNxRFmdDgx1Gbr0FCgw0w4WQmI= +github.com/pk910/dynamic-ssz v1.0.1/go.mod h1:rnDVX65+7pLU2oeMdGCCa31zSsa5uozRQigSODlp8jw= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -133,8 +135,6 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -gopkg.in/Knetic/govaluate.v3 v3.0.0 h1:18mUyIt4ZlRlFZAAfVetz4/rzlJs9yhN+U02F4u1AOc= -gopkg.in/Knetic/govaluate.v3 v3.0.0/go.mod h1:csKLBORsPbafmSCGTEh3U7Ozmsuq8ZSIlKk1bcqph0E= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/server/get_header.go b/server/get_header.go index c7099571..ce236760 100644 --- a/server/get_header.go +++ b/server/get_header.go @@ -176,7 +176,7 @@ func (m *BoostService) getHeader(log *logrus.Entry, slot phase0.Slot, pubkey, pa // Verify the relay signature in the relay response if !config.SkipRelaySignatureCheck { - ok, err := checkRelaySignature(bid, m.builderSigningDomain, relay.PublicKey) + ok, err := checkRelaySignature(bid, m.builderSigningDomain, relay.PublicKey, m.preset) if err != nil { log.WithError(err).Error("error verifying relay signature") return diff --git a/server/get_payload.go b/server/get_payload.go index 6dfaa4f6..de7bc999 100644 --- a/server/get_payload.go +++ b/server/get_payload.go @@ -27,6 +27,7 @@ import ( "github.com/flashbots/mev-boost/config" "github.com/flashbots/mev-boost/server/params" "github.com/flashbots/mev-boost/server/types" + dynssz "github.com/pk910/dynamic-ssz" "github.com/sirupsen/logrus" ) @@ -56,7 +57,7 @@ func (m *BoostService) getPayload(log *logrus.Entry, signedBlindedBeaconBlockByt // Decode the request request := new(eth2Api.VersionedSignedBlindedBeaconBlock) - err = decodeSignedBlindedBeaconBlock(signedBlindedBeaconBlockBytes, parsedProposerContentType, proposerEthConsensusVersion, request) + err = m.decodeSignedBlindedBeaconBlock(signedBlindedBeaconBlockBytes, parsedProposerContentType, proposerEthConsensusVersion, request) if err != nil { log.WithError(err).Error("failed to decode signed blinded beacon block") return nil, bidResp{} @@ -156,7 +157,7 @@ func (m *BoostService) getPayload(log *logrus.Entry, signedBlindedBeaconBlockByt if parsedProposerContentType == MediaTypeOctetStream && !relaySupportsSSZ { requestContentType = MediaTypeJSON startTime := time.Now() - requestBytes, err = convertSSZToJSON(proposerEthConsensusVersion, signedBlindedBeaconBlockBytes) + requestBytes, err = m.convertSSZToJSON(proposerEthConsensusVersion, signedBlindedBeaconBlockBytes) if err != nil { log.WithError(errFailedToConvert).Error("failed to convert SSZ to JSON") return nil, err @@ -226,7 +227,7 @@ func (m *BoostService) getPayload(log *logrus.Entry, signedBlindedBeaconBlockByt // Decode response response := new(builderApi.VersionedSubmitBlindedBlockResponse) - err = decodeSubmitBlindedBlockResponse(respBytes, respContentType, respEthConsensusVersion, response) + err = m.decodeSubmitBlindedBlockResponse(respBytes, respContentType, respEthConsensusVersion, response) if err != nil { log.WithError(err).Warn("error decoding bid") return @@ -377,7 +378,7 @@ type canUnmarshalSSZ interface { } // convertSSZToJSON converts SSZ-encoded bytes to JSON based on the given ethConsensusVersion -func convertSSZToJSON(ethConsensusVersion string, sszBytes []byte) ([]byte, error) { +func (m *BoostService) convertSSZToJSON(ethConsensusVersion string, sszBytes []byte) ([]byte, error) { var block canUnmarshalSSZ switch ethConsensusVersion { case EthConsensusVersionBellatrix: @@ -391,9 +392,9 @@ func convertSSZToJSON(ethConsensusVersion string, sszBytes []byte) ([]byte, erro default: return nil, errInvalidForkVersion } - + dynSSZ := dynssz.NewDynSsz(m.preset) // Unmarshal the SSZ-encoded bytes into the block - if err := block.UnmarshalSSZ(sszBytes); err != nil { + if err := dynSSZ.UnmarshalSSZ(block, sszBytes); err != nil { return nil, err } @@ -403,27 +404,29 @@ func convertSSZToJSON(ethConsensusVersion string, sszBytes []byte) ([]byte, erro // decodeSignedBlindedBeaconBlock will decode the request block in either JSON or SSZ. // Note: when decoding JSON, we must attempt decoding from newest to oldest fork version. -func decodeSignedBlindedBeaconBlock(in []byte, contentType, ethConsensusVersion string, out *eth2Api.VersionedSignedBlindedBeaconBlock) error { +func (m *BoostService) decodeSignedBlindedBeaconBlock(in []byte, contentType, ethConsensusVersion string, out *eth2Api.VersionedSignedBlindedBeaconBlock) error { switch contentType { case MediaTypeOctetStream: if ethConsensusVersion != "" { + dynSSZ := dynssz.NewDynSsz(m.preset) + switch ethConsensusVersion { case EthConsensusVersionBellatrix: out.Version = spec.DataVersionBellatrix out.Bellatrix = new(eth2ApiV1Bellatrix.SignedBlindedBeaconBlock) - return out.Bellatrix.UnmarshalSSZ(in) + return dynSSZ.UnmarshalSSZ(out.Bellatrix, in) case EthConsensusVersionCapella: out.Version = spec.DataVersionCapella out.Capella = new(eth2ApiV1Capella.SignedBlindedBeaconBlock) - return out.Capella.UnmarshalSSZ(in) + return dynSSZ.UnmarshalSSZ(out.Capella, in) case EthConsensusVersionDeneb: out.Version = spec.DataVersionDeneb out.Deneb = new(eth2ApiV1Deneb.SignedBlindedBeaconBlock) - return out.Deneb.UnmarshalSSZ(in) + return dynSSZ.UnmarshalSSZ(out.Deneb, in) case EthConsensusVersionElectra: out.Version = spec.DataVersionElectra out.Electra = new(eth2ApiV1Electra.SignedBlindedBeaconBlock) - return out.Electra.UnmarshalSSZ(in) + return dynSSZ.UnmarshalSSZ(out.Electra, in) default: return errInvalidForkVersion } @@ -466,27 +469,29 @@ func decodeSignedBlindedBeaconBlock(in []byte, contentType, ethConsensusVersion } // decodeSubmitBlindedBlockResponse will decode the response contents in either JSON or SSZ -func decodeSubmitBlindedBlockResponse(in []byte, contentType, ethConsensusVersion string, out *builderApi.VersionedSubmitBlindedBlockResponse) error { +func (m *BoostService) decodeSubmitBlindedBlockResponse(in []byte, contentType, ethConsensusVersion string, out *builderApi.VersionedSubmitBlindedBlockResponse) error { switch contentType { case MediaTypeOctetStream: if ethConsensusVersion != "" { + dynSSZ := dynssz.NewDynSsz(m.preset) + switch ethConsensusVersion { case EthConsensusVersionBellatrix: out.Version = spec.DataVersionBellatrix out.Bellatrix = new(bellatrix.ExecutionPayload) - return out.Bellatrix.UnmarshalSSZ(in) + return dynSSZ.UnmarshalSSZ(out.Bellatrix, in) case EthConsensusVersionCapella: out.Version = spec.DataVersionCapella out.Capella = new(capella.ExecutionPayload) - return out.Capella.UnmarshalSSZ(in) + return dynSSZ.UnmarshalSSZ(out.Capella, in) case EthConsensusVersionDeneb: out.Version = spec.DataVersionDeneb out.Deneb = new(builderApiDeneb.ExecutionPayloadAndBlobsBundle) - return out.Deneb.UnmarshalSSZ(in) + return dynSSZ.UnmarshalSSZ(out.Deneb, in) case EthConsensusVersionElectra: out.Version = spec.DataVersionElectra out.Electra = new(builderApiDeneb.ExecutionPayloadAndBlobsBundle) - return out.Electra.UnmarshalSSZ(in) + return dynSSZ.UnmarshalSSZ(out.Electra, in) default: return errInvalidForkVersion } diff --git a/server/utils.go b/server/utils.go index 1e85da3c..5d9a085b 100644 --- a/server/utils.go +++ b/server/utils.go @@ -23,6 +23,7 @@ import ( "github.com/flashbots/mev-boost/config" "github.com/flashbots/mev-boost/server/types" "github.com/holiman/uint256" + dynssz "github.com/pk910/dynamic-ssz" ) var ( @@ -183,7 +184,7 @@ func parseBidInfo(bid *builderSpec.VersionedSignedBuilderBid) (bidInfo, error) { }, nil } -func checkRelaySignature(bid *builderSpec.VersionedSignedBuilderBid, domain phase0.Domain, pubKey phase0.BLSPubKey) (bool, error) { +func checkRelaySignature(bid *builderSpec.VersionedSignedBuilderBid, domain phase0.Domain, pubKey phase0.BLSPubKey, preset map[string]interface{}) (bool, error) { root, err := bid.MessageHashTreeRoot() if err != nil { return false, err @@ -193,7 +194,8 @@ func checkRelaySignature(bid *builderSpec.VersionedSignedBuilderBid, domain phas return false, err } signingData := phase0.SigningData{ObjectRoot: root, Domain: domain} - msg, err := signingData.HashTreeRoot() + dynSSZ := dynssz.NewDynSsz(preset) + msg, err := dynSSZ.HashTreeRoot(signingData) if err != nil { return false, err } From 8a509a8d08a4e8fde5f16338023b32631bf703f7 Mon Sep 17 00:00:00 2001 From: faheelsattar Date: Wed, 13 Aug 2025 15:23:18 +0200 Subject: [PATCH 3/7] add flag --- .env.example | 3 +++ cli/flags.go | 8 ++++++++ cli/main.go | 2 ++ server/get_header.go | 22 +++++++++------------- server/get_payload.go | 19 +++++++------------ server/service.go | 9 +++++---- server/service_test.go | 3 ++- server/utils.go | 3 +-- 8 files changed, 37 insertions(+), 32 deletions(-) diff --git a/.env.example b/.env.example index 3748f32b..526f7a18 100644 --- a/.env.example +++ b/.env.example @@ -27,3 +27,6 @@ RELAY_TIMEOUT_MS_REGVAL=3000 # Timeout for registerValidator request # Retry settings REQUEST_MAX_RETRIES=5 # Maximum number of retries for a relay get payload request + +# Minimal Presset settings +MINIMAL_PRESET=false # Set to true to enable using minimal preset diff --git a/cli/flags.go b/cli/flags.go index ab8760bd..de8e27a8 100644 --- a/cli/flags.go +++ b/cli/flags.go @@ -26,6 +26,7 @@ var flags = []cli.Flag{ sepoliaFlag, holeskyFlag, hoodiFlag, + minimalPresetFlag, // relay relaysFlag, deprecatedRelayMonitorFlag, @@ -122,6 +123,13 @@ var ( Usage: "use Hoodi", Category: GenesisCategory, } + minimalPresetFlag = &cli.BoolFlag{ + Name: "minimal-preset", + Sources: cli.EnvVars("MINIMAL_PRESET"), + Usage: "use Minimal preset", + Value: false, + Category: GenesisCategory, + } // Relay relaysFlag = &cli.StringSliceFlag{ Name: "relay", diff --git a/cli/main.go b/cli/main.go index 9de3664b..7f811e75 100644 --- a/cli/main.go +++ b/cli/main.go @@ -68,6 +68,7 @@ func start(_ context.Context, cmd *cli.Command) error { genesisForkVersion, genesisTime = setupGenesis(cmd) relays, minBid, relayCheck = setupRelays(cmd) listenAddr = cmd.String(addrFlag.Name) + minimalPreset = cmd.Bool(minimalPresetFlag.Name) ) opts := server.BoostServiceOpts{ @@ -82,6 +83,7 @@ func start(_ context.Context, cmd *cli.Command) error { RequestTimeoutGetPayload: time.Duration(cmd.Int(timeoutGetPayloadFlag.Name)) * time.Millisecond, RequestTimeoutRegVal: time.Duration(cmd.Int(timeoutRegValFlag.Name)) * time.Millisecond, RequestMaxRetries: cmd.Int(maxRetriesFlag.Name), + MinimalPreset: minimalPreset, } service, err := server.NewBoostService(opts) if err != nil { diff --git a/server/get_header.go b/server/get_header.go index ce236760..57684fd0 100644 --- a/server/get_header.go +++ b/server/get_header.go @@ -20,7 +20,6 @@ import ( "github.com/flashbots/mev-boost/config" "github.com/flashbots/mev-boost/server/types" "github.com/google/uuid" - dynssz "github.com/pk910/dynamic-ssz" "github.com/sirupsen/logrus" ) @@ -176,7 +175,7 @@ func (m *BoostService) getHeader(log *logrus.Entry, slot phase0.Slot, pubkey, pa // Verify the relay signature in the relay response if !config.SkipRelaySignatureCheck { - ok, err := checkRelaySignature(bid, m.builderSigningDomain, relay.PublicKey, m.preset) + ok, err := checkRelaySignature(bid, m.builderSigningDomain, relay.PublicKey, m.dynSSZ) if err != nil { log.WithError(err).Error("error verifying relay signature") return @@ -263,25 +262,23 @@ func (m *BoostService) decodeBid(respBytes []byte, respContentType, ethConsensus case MediaTypeOctetStream: if ethConsensusVersion != "" { // Do SSZ decoding - dynSSZ := dynssz.NewDynSsz(m.preset) - switch ethConsensusVersion { case EthConsensusVersionBellatrix: bid.Version = spec.DataVersionBellatrix bid.Bellatrix = new(builderApiBellatrix.SignedBuilderBid) - return dynSSZ.UnmarshalSSZ(bid.Bellatrix, respBytes) + return m.dynSSZ.UnmarshalSSZ(bid.Bellatrix, respBytes) case EthConsensusVersionCapella: bid.Version = spec.DataVersionCapella bid.Capella = new(builderApiCapella.SignedBuilderBid) - return dynSSZ.UnmarshalSSZ(bid.Capella, respBytes) + return m.dynSSZ.UnmarshalSSZ(bid.Capella, respBytes) case EthConsensusVersionDeneb: bid.Version = spec.DataVersionDeneb bid.Deneb = new(builderApiDeneb.SignedBuilderBid) - return dynSSZ.UnmarshalSSZ(bid.Deneb, respBytes) + return m.dynSSZ.UnmarshalSSZ(bid.Deneb, respBytes) case EthConsensusVersionElectra: bid.Version = spec.DataVersionElectra bid.Electra = new(builderApiElectra.SignedBuilderBid) - return dynSSZ.UnmarshalSSZ(bid.Electra, respBytes) + return m.dynSSZ.UnmarshalSSZ(bid.Electra, respBytes) default: return errInvalidForkVersion } @@ -312,20 +309,19 @@ func (m *BoostService) respondGetHeaderSSZ(w http.ResponseWriter, result *bidRes // Serialize the response var err error var sszData []byte - dynSSZ := dynssz.NewDynSsz(m.preset) switch result.response.Version { case spec.DataVersionBellatrix: w.Header().Set(HeaderEthConsensusVersion, EthConsensusVersionBellatrix) - sszData, err = dynSSZ.MarshalSSZ(result.response.Bellatrix) + sszData, err = m.dynSSZ.MarshalSSZ(result.response.Bellatrix) case spec.DataVersionCapella: w.Header().Set(HeaderEthConsensusVersion, EthConsensusVersionCapella) - sszData, err = dynSSZ.MarshalSSZ(result.response.Capella) + sszData, err = m.dynSSZ.MarshalSSZ(result.response.Capella) case spec.DataVersionDeneb: w.Header().Set(HeaderEthConsensusVersion, EthConsensusVersionDeneb) - sszData, err = dynSSZ.MarshalSSZ(result.response.Deneb) + sszData, err = m.dynSSZ.MarshalSSZ(result.response.Deneb) case spec.DataVersionElectra: w.Header().Set(HeaderEthConsensusVersion, EthConsensusVersionElectra) - sszData, err = dynSSZ.MarshalSSZ(result.response.Electra) + sszData, err = m.dynSSZ.MarshalSSZ(result.response.Electra) case spec.DataVersionUnknown, spec.DataVersionPhase0, spec.DataVersionAltair: err = errInvalidForkVersion } diff --git a/server/get_payload.go b/server/get_payload.go index de7bc999..9f569a6b 100644 --- a/server/get_payload.go +++ b/server/get_payload.go @@ -57,7 +57,7 @@ func (m *BoostService) getPayload(log *logrus.Entry, signedBlindedBeaconBlockByt // Decode the request request := new(eth2Api.VersionedSignedBlindedBeaconBlock) - err = m.decodeSignedBlindedBeaconBlock(signedBlindedBeaconBlockBytes, parsedProposerContentType, proposerEthConsensusVersion, request) + err = decodeSignedBlindedBeaconBlock(signedBlindedBeaconBlockBytes, parsedProposerContentType, proposerEthConsensusVersion, request, m.dynSSZ) if err != nil { log.WithError(err).Error("failed to decode signed blinded beacon block") return nil, bidResp{} @@ -392,9 +392,8 @@ func (m *BoostService) convertSSZToJSON(ethConsensusVersion string, sszBytes []b default: return nil, errInvalidForkVersion } - dynSSZ := dynssz.NewDynSsz(m.preset) // Unmarshal the SSZ-encoded bytes into the block - if err := dynSSZ.UnmarshalSSZ(block, sszBytes); err != nil { + if err := m.dynSSZ.UnmarshalSSZ(block, sszBytes); err != nil { return nil, err } @@ -404,12 +403,10 @@ func (m *BoostService) convertSSZToJSON(ethConsensusVersion string, sszBytes []b // decodeSignedBlindedBeaconBlock will decode the request block in either JSON or SSZ. // Note: when decoding JSON, we must attempt decoding from newest to oldest fork version. -func (m *BoostService) decodeSignedBlindedBeaconBlock(in []byte, contentType, ethConsensusVersion string, out *eth2Api.VersionedSignedBlindedBeaconBlock) error { +func decodeSignedBlindedBeaconBlock(in []byte, contentType, ethConsensusVersion string, out *eth2Api.VersionedSignedBlindedBeaconBlock, dynSSZ *dynssz.DynSsz) error { switch contentType { case MediaTypeOctetStream: if ethConsensusVersion != "" { - dynSSZ := dynssz.NewDynSsz(m.preset) - switch ethConsensusVersion { case EthConsensusVersionBellatrix: out.Version = spec.DataVersionBellatrix @@ -473,25 +470,23 @@ func (m *BoostService) decodeSubmitBlindedBlockResponse(in []byte, contentType, switch contentType { case MediaTypeOctetStream: if ethConsensusVersion != "" { - dynSSZ := dynssz.NewDynSsz(m.preset) - switch ethConsensusVersion { case EthConsensusVersionBellatrix: out.Version = spec.DataVersionBellatrix out.Bellatrix = new(bellatrix.ExecutionPayload) - return dynSSZ.UnmarshalSSZ(out.Bellatrix, in) + return m.dynSSZ.UnmarshalSSZ(out.Bellatrix, in) case EthConsensusVersionCapella: out.Version = spec.DataVersionCapella out.Capella = new(capella.ExecutionPayload) - return dynSSZ.UnmarshalSSZ(out.Capella, in) + return m.dynSSZ.UnmarshalSSZ(out.Capella, in) case EthConsensusVersionDeneb: out.Version = spec.DataVersionDeneb out.Deneb = new(builderApiDeneb.ExecutionPayloadAndBlobsBundle) - return dynSSZ.UnmarshalSSZ(out.Deneb, in) + return m.dynSSZ.UnmarshalSSZ(out.Deneb, in) case EthConsensusVersionElectra: out.Version = spec.DataVersionElectra out.Electra = new(builderApiDeneb.ExecutionPayloadAndBlobsBundle) - return dynSSZ.UnmarshalSSZ(out.Electra, in) + return m.dynSSZ.UnmarshalSSZ(out.Electra, in) default: return errInvalidForkVersion } diff --git a/server/service.go b/server/service.go index 318f81b4..46ed978a 100644 --- a/server/service.go +++ b/server/service.go @@ -22,6 +22,7 @@ import ( "github.com/flashbots/mev-boost/server/types" "github.com/google/uuid" "github.com/gorilla/mux" + dynssz "github.com/pk910/dynamic-ssz" "github.com/sirupsen/logrus" goacceptheaders "github.com/timewasted/go-accept-headers" ) @@ -64,7 +65,7 @@ type BoostServiceOpts struct { RequestTimeoutGetPayload time.Duration RequestTimeoutRegVal time.Duration RequestMaxRetries int - minimalPreset bool + MinimalPreset bool } // BoostService - the mev-boost service @@ -89,7 +90,7 @@ type BoostService struct { slotUID *slotUID slotUIDLock sync.Mutex - preset map[string]interface{} + dynSSZ *dynssz.DynSsz } // NewBoostService created a new BoostService @@ -104,7 +105,7 @@ func NewBoostService(opts BoostServiceOpts) (*BoostService, error) { } preset := eth2client.MainnetPreset - if opts.minimalPreset { + if opts.MinimalPreset { preset = eth2client.MinimalPreset } @@ -117,7 +118,7 @@ func NewBoostService(opts BoostServiceOpts) (*BoostService, error) { genesisTime: opts.GenesisTime, bids: make(map[string]bidResp), slotUID: &slotUID{}, - preset: preset, + dynSSZ: dynssz.NewDynSsz(preset), builderSigningDomain: builderSigningDomain, httpClientGetHeader: http.Client{ diff --git a/server/service_test.go b/server/service_test.go index 3c9b932a..0125c584 100644 --- a/server/service_test.go +++ b/server/service_test.go @@ -70,6 +70,7 @@ func newTestBackend(t *testing.T, numRelays int, relayTimeout time.Duration) *te RequestTimeoutGetPayload: relayTimeout, RequestTimeoutRegVal: relayTimeout, RequestMaxRetries: 5, + MinimalPreset: false, } service, err := NewBoostService(opts) require.NoError(t, err) @@ -1299,7 +1300,7 @@ func TestGetPayloadForks(t *testing.T) { // Decode the block block := new(eth2Api.VersionedSignedBlindedBeaconBlock) - err = decodeSignedBlindedBeaconBlock(jsonBytes, MediaTypeJSON, "", block) + err = decodeSignedBlindedBeaconBlock(jsonBytes, MediaTypeJSON, "", block, backend.boost.dynSSZ) require.NoError(t, err) // Get the request slot and block hash diff --git a/server/utils.go b/server/utils.go index 5d9a085b..e388b504 100644 --- a/server/utils.go +++ b/server/utils.go @@ -184,7 +184,7 @@ func parseBidInfo(bid *builderSpec.VersionedSignedBuilderBid) (bidInfo, error) { }, nil } -func checkRelaySignature(bid *builderSpec.VersionedSignedBuilderBid, domain phase0.Domain, pubKey phase0.BLSPubKey, preset map[string]interface{}) (bool, error) { +func checkRelaySignature(bid *builderSpec.VersionedSignedBuilderBid, domain phase0.Domain, pubKey phase0.BLSPubKey, dynSSZ *dynssz.DynSsz) (bool, error) { root, err := bid.MessageHashTreeRoot() if err != nil { return false, err @@ -194,7 +194,6 @@ func checkRelaySignature(bid *builderSpec.VersionedSignedBuilderBid, domain phas return false, err } signingData := phase0.SigningData{ObjectRoot: root, Domain: domain} - dynSSZ := dynssz.NewDynSsz(preset) msg, err := dynSSZ.HashTreeRoot(signingData) if err != nil { return false, err From e7dff7cffc7f5d4a6c49265c702f21d177c3d557 Mon Sep 17 00:00:00 2001 From: faheelsattar Date: Wed, 13 Aug 2025 15:23:56 +0200 Subject: [PATCH 4/7] fix spelling --- .env.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 526f7a18..2dc3a2d8 100644 --- a/.env.example +++ b/.env.example @@ -28,5 +28,5 @@ RELAY_TIMEOUT_MS_REGVAL=3000 # Timeout for registerValidator request # Retry settings REQUEST_MAX_RETRIES=5 # Maximum number of retries for a relay get payload request -# Minimal Presset settings +# Minimal Preset settings MINIMAL_PRESET=false # Set to true to enable using minimal preset From 1b62f7554f9de11f265ab6084a6da38e4f3a6a70 Mon Sep 17 00:00:00 2001 From: faheelsattar Date: Wed, 13 Aug 2025 17:35:14 +0200 Subject: [PATCH 5/7] pass pointer --- server/register_validator_test.go | 11 +++++++++++ server/service_test.go | 1 + server/utils.go | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/server/register_validator_test.go b/server/register_validator_test.go index 381fea04..6d354475 100644 --- a/server/register_validator_test.go +++ b/server/register_validator_test.go @@ -10,9 +10,11 @@ import ( "time" builderApiV1 "github.com/attestantio/go-builder-client/api/v1" + eth2client "github.com/attestantio/go-eth2-client" "github.com/flashbots/mev-boost/server/mock" "github.com/flashbots/mev-boost/server/params" "github.com/flashbots/mev-boost/server/types" + dynssz "github.com/pk910/dynamic-ssz" "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" ) @@ -26,6 +28,7 @@ func TestHandleRegisterValidator_EmptyList(t *testing.T) { relays: []types.RelayEntry{relay.RelayEntry}, httpClientRegVal: *http.DefaultClient, log: logrus.NewEntry(logrus.New()), + dynSSZ: dynssz.NewDynSsz(eth2client.MainnetPreset), } reqBody := bytes.NewBufferString("[]") @@ -50,6 +53,7 @@ func TestHandleRegisterValidator_NotEmptyList(t *testing.T) { relays: []types.RelayEntry{relay.RelayEntry}, httpClientRegVal: *http.DefaultClient, log: logrus.NewEntry(logrus.New()), + dynSSZ: dynssz.NewDynSsz(eth2client.MainnetPreset), } validatorRegistrations := []builderApiV1.SignedValidatorRegistration{ @@ -90,6 +94,7 @@ func TestHandleRegisterValidator_InvalidJSON(t *testing.T) { relays: []types.RelayEntry{relay.RelayEntry}, httpClientRegVal: *http.DefaultClient, log: logrus.NewEntry(logrus.New()), + dynSSZ: dynssz.NewDynSsz(eth2client.MainnetPreset), } reqBody := bytes.NewBufferString("invalid json") @@ -114,6 +119,7 @@ func TestHandleRegisterValidator_ValidSSZ(t *testing.T) { relays: []types.RelayEntry{relay.RelayEntry}, httpClientRegVal: *http.DefaultClient, log: logrus.NewEntry(logrus.New()), + dynSSZ: dynssz.NewDynSsz(eth2client.MainnetPreset), } validatorRegistrations := builderApiV1.SignedValidatorRegistrations{ @@ -156,6 +162,7 @@ func TestHandleRegisterValidator_InvalidSSZ(t *testing.T) { relays: []types.RelayEntry{relay.RelayEntry}, httpClientRegVal: *http.DefaultClient, log: logrus.NewEntry(logrus.New()), + dynSSZ: dynssz.NewDynSsz(eth2client.MainnetPreset), } reqBody := bytes.NewBufferString("invalid ssz") @@ -186,6 +193,7 @@ func TestHandleRegisterValidator_MultipleRelaysOneSuccess(t *testing.T) { relays: []types.RelayEntry{badRelay.RelayEntry, relaySuccess.RelayEntry}, httpClientRegVal: *http.DefaultClient, log: logrus.NewEntry(logrus.New()), + dynSSZ: dynssz.NewDynSsz(eth2client.MainnetPreset), } reqBody := bytes.NewBufferString("[]") @@ -221,6 +229,7 @@ func TestHandleRegisterValidator_AllFail(t *testing.T) { relays: []types.RelayEntry{badRelay1.RelayEntry, badRelay2.RelayEntry}, httpClientRegVal: *http.DefaultClient, log: logrus.NewEntry(logrus.New()), + dynSSZ: dynssz.NewDynSsz(eth2client.MainnetPreset), } reqBody := bytes.NewBufferString("[]") @@ -247,6 +256,7 @@ func TestHandleRegisterValidator_RelayNetworkError(t *testing.T) { relays: []types.RelayEntry{relay.RelayEntry}, httpClientRegVal: *http.DefaultClient, log: logrus.NewEntry(logrus.New()), + dynSSZ: dynssz.NewDynSsz(eth2client.MainnetPreset), } reqBody := bytes.NewBufferString("[]") @@ -275,6 +285,7 @@ func TestHandleRegisterValidator_HeaderPropagation(t *testing.T) { relays: []types.RelayEntry{relay.RelayEntry}, httpClientRegVal: *http.DefaultClient, log: logrus.NewEntry(logrus.New()), + dynSSZ: dynssz.NewDynSsz(eth2client.MainnetPreset), } reqBody := bytes.NewBufferString("[]") diff --git a/server/service_test.go b/server/service_test.go index 0125c584..40de5292 100644 --- a/server/service_test.go +++ b/server/service_test.go @@ -131,6 +131,7 @@ func TestNewBoostServiceErrors(t *testing.T) { RequestTimeoutGetPayload: time.Second, RequestTimeoutRegVal: time.Second, RequestMaxRetries: 1, + MinimalPreset: false, }) require.Error(t, err) }) diff --git a/server/utils.go b/server/utils.go index e388b504..ad0a84e5 100644 --- a/server/utils.go +++ b/server/utils.go @@ -194,7 +194,7 @@ func checkRelaySignature(bid *builderSpec.VersionedSignedBuilderBid, domain phas return false, err } signingData := phase0.SigningData{ObjectRoot: root, Domain: domain} - msg, err := dynSSZ.HashTreeRoot(signingData) + msg, err := dynSSZ.HashTreeRoot(&signingData) if err != nil { return false, err } From c1a18b30e2e435af22e6cf408725132e32e0776d Mon Sep 17 00:00:00 2001 From: faheelsattar Date: Wed, 13 Aug 2025 17:42:41 +0200 Subject: [PATCH 6/7] revert --- server/get_payload.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/server/get_payload.go b/server/get_payload.go index 9f569a6b..9e86789f 100644 --- a/server/get_payload.go +++ b/server/get_payload.go @@ -227,7 +227,7 @@ func (m *BoostService) getPayload(log *logrus.Entry, signedBlindedBeaconBlockByt // Decode response response := new(builderApi.VersionedSubmitBlindedBlockResponse) - err = m.decodeSubmitBlindedBlockResponse(respBytes, respContentType, respEthConsensusVersion, response) + err = decodeSubmitBlindedBlockResponse(respBytes, respContentType, respEthConsensusVersion, response, m.dynSSZ) if err != nil { log.WithError(err).Warn("error decoding bid") return @@ -466,7 +466,7 @@ func decodeSignedBlindedBeaconBlock(in []byte, contentType, ethConsensusVersion } // decodeSubmitBlindedBlockResponse will decode the response contents in either JSON or SSZ -func (m *BoostService) decodeSubmitBlindedBlockResponse(in []byte, contentType, ethConsensusVersion string, out *builderApi.VersionedSubmitBlindedBlockResponse) error { +func decodeSubmitBlindedBlockResponse(in []byte, contentType, ethConsensusVersion string, out *builderApi.VersionedSubmitBlindedBlockResponse, dynSSZ *dynssz.DynSsz) error { switch contentType { case MediaTypeOctetStream: if ethConsensusVersion != "" { @@ -474,19 +474,19 @@ func (m *BoostService) decodeSubmitBlindedBlockResponse(in []byte, contentType, case EthConsensusVersionBellatrix: out.Version = spec.DataVersionBellatrix out.Bellatrix = new(bellatrix.ExecutionPayload) - return m.dynSSZ.UnmarshalSSZ(out.Bellatrix, in) + return dynSSZ.UnmarshalSSZ(out.Bellatrix, in) case EthConsensusVersionCapella: out.Version = spec.DataVersionCapella out.Capella = new(capella.ExecutionPayload) - return m.dynSSZ.UnmarshalSSZ(out.Capella, in) + return dynSSZ.UnmarshalSSZ(out.Capella, in) case EthConsensusVersionDeneb: out.Version = spec.DataVersionDeneb out.Deneb = new(builderApiDeneb.ExecutionPayloadAndBlobsBundle) - return m.dynSSZ.UnmarshalSSZ(out.Deneb, in) + return dynSSZ.UnmarshalSSZ(out.Deneb, in) case EthConsensusVersionElectra: out.Version = spec.DataVersionElectra out.Electra = new(builderApiDeneb.ExecutionPayloadAndBlobsBundle) - return m.dynSSZ.UnmarshalSSZ(out.Electra, in) + return dynSSZ.UnmarshalSSZ(out.Electra, in) default: return errInvalidForkVersion } From fe81afd4e901352edfb2cd489eeba0abfb88bd45 Mon Sep 17 00:00:00 2001 From: faheelsattar Date: Wed, 13 Aug 2025 17:50:01 +0200 Subject: [PATCH 7/7] revert --- server/get_payload.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/get_payload.go b/server/get_payload.go index 9e86789f..e08cbe2f 100644 --- a/server/get_payload.go +++ b/server/get_payload.go @@ -157,7 +157,7 @@ func (m *BoostService) getPayload(log *logrus.Entry, signedBlindedBeaconBlockByt if parsedProposerContentType == MediaTypeOctetStream && !relaySupportsSSZ { requestContentType = MediaTypeJSON startTime := time.Now() - requestBytes, err = m.convertSSZToJSON(proposerEthConsensusVersion, signedBlindedBeaconBlockBytes) + requestBytes, err = convertSSZToJSON(proposerEthConsensusVersion, signedBlindedBeaconBlockBytes, m.dynSSZ) if err != nil { log.WithError(errFailedToConvert).Error("failed to convert SSZ to JSON") return nil, err @@ -378,7 +378,7 @@ type canUnmarshalSSZ interface { } // convertSSZToJSON converts SSZ-encoded bytes to JSON based on the given ethConsensusVersion -func (m *BoostService) convertSSZToJSON(ethConsensusVersion string, sszBytes []byte) ([]byte, error) { +func convertSSZToJSON(ethConsensusVersion string, sszBytes []byte, dynSSZ *dynssz.DynSsz) ([]byte, error) { var block canUnmarshalSSZ switch ethConsensusVersion { case EthConsensusVersionBellatrix: @@ -393,7 +393,7 @@ func (m *BoostService) convertSSZToJSON(ethConsensusVersion string, sszBytes []b return nil, errInvalidForkVersion } // Unmarshal the SSZ-encoded bytes into the block - if err := m.dynSSZ.UnmarshalSSZ(block, sszBytes); err != nil { + if err := dynSSZ.UnmarshalSSZ(block, sszBytes); err != nil { return nil, err }