Skip to content

Commit 4671727

Browse files
lightclientfjl
authored andcommitted
beacon/engine,eth/catalyst: hex marshal requests in engine api (ethereum#30603)
Co-authored-by: Felix Lange <fjl@twurst.com>
1 parent d4ff223 commit 4671727

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

eth/catalyst/api.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -593,8 +593,7 @@ func (api *ConsensusAPI) NewPayloadV3(params engine.ExecutableData, versionedHas
593593
}
594594

595595
// NewPayloadV4 creates an Eth1 block, inserts it in the chain, and returns the status of the chain.
596-
// NewPayloadV4 creates an Eth1 block, inserts it in the chain, and returns the status of the chain.
597-
func (api *ConsensusAPI) NewPayloadV4(params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, requests [][]byte) (engine.PayloadStatusV1, error) {
596+
func (api *ConsensusAPI) NewPayloadV4(params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, executionRequests []hexutil.Bytes) (engine.PayloadStatusV1, error) {
598597
if params.Withdrawals == nil {
599598
return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(errors.New("nil withdrawals post-shanghai"))
600599
}
@@ -611,13 +610,14 @@ func (api *ConsensusAPI) NewPayloadV4(params engine.ExecutableData, versionedHas
611610
if beaconRoot == nil {
612611
return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(errors.New("nil beaconRoot post-cancun"))
613612
}
614-
if requests == nil {
613+
if executionRequests == nil {
615614
return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(errors.New("nil executionRequests post-prague"))
616615
}
617616

618617
if api.eth.BlockChain().Config().LatestFork(params.Timestamp) != forks.Prague {
619618
return engine.PayloadStatusV1{Status: engine.INVALID}, engine.UnsupportedFork.With(errors.New("newPayloadV4 must only be called for prague payloads"))
620619
}
620+
requests := convertRequests(executionRequests)
621621
return api.newPayload(params, versionedHashes, beaconRoot, requests, false)
622622
}
623623

@@ -682,7 +682,7 @@ func (api *ConsensusAPI) NewPayloadWithWitnessV3(params engine.ExecutableData, v
682682

683683
// NewPayloadWithWitnessV4 is analogous to NewPayloadV4, only it also generates
684684
// and returns a stateless witness after running the payload.
685-
func (api *ConsensusAPI) NewPayloadWithWitnessV4(params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, requests [][]byte) (engine.PayloadStatusV1, error) {
685+
func (api *ConsensusAPI) NewPayloadWithWitnessV4(params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, executionRequests []hexutil.Bytes) (engine.PayloadStatusV1, error) {
686686
if params.Withdrawals == nil {
687687
return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(errors.New("nil withdrawals post-shanghai"))
688688
}
@@ -699,13 +699,14 @@ func (api *ConsensusAPI) NewPayloadWithWitnessV4(params engine.ExecutableData, v
699699
if beaconRoot == nil {
700700
return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(errors.New("nil beaconRoot post-cancun"))
701701
}
702-
if requests == nil {
702+
if executionRequests == nil {
703703
return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(errors.New("nil executionRequests post-prague"))
704704
}
705705

706706
if api.eth.BlockChain().Config().LatestFork(params.Timestamp) != forks.Prague {
707707
return engine.PayloadStatusV1{Status: engine.INVALID}, engine.UnsupportedFork.With(errors.New("newPayloadWithWitnessV4 must only be called for prague payloads"))
708708
}
709+
requests := convertRequests(executionRequests)
709710
return api.newPayload(params, versionedHashes, beaconRoot, requests, true)
710711
}
711712

@@ -770,7 +771,7 @@ func (api *ConsensusAPI) ExecuteStatelessPayloadV3(params engine.ExecutableData,
770771

771772
// ExecuteStatelessPayloadV4 is analogous to NewPayloadV4, only it operates in
772773
// a stateless mode on top of a provided witness instead of the local database.
773-
func (api *ConsensusAPI) ExecuteStatelessPayloadV4(params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, requests [][]byte, opaqueWitness hexutil.Bytes) (engine.StatelessPayloadStatusV1, error) {
774+
func (api *ConsensusAPI) ExecuteStatelessPayloadV4(params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, executionRequests []hexutil.Bytes, opaqueWitness hexutil.Bytes) (engine.StatelessPayloadStatusV1, error) {
774775
if params.Withdrawals == nil {
775776
return engine.StatelessPayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(errors.New("nil withdrawals post-shanghai"))
776777
}
@@ -787,13 +788,14 @@ func (api *ConsensusAPI) ExecuteStatelessPayloadV4(params engine.ExecutableData,
787788
if beaconRoot == nil {
788789
return engine.StatelessPayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(errors.New("nil beaconRoot post-cancun"))
789790
}
790-
if requests == nil {
791+
if executionRequests == nil {
791792
return engine.StatelessPayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(errors.New("nil executionRequests post-prague"))
792793
}
793794

794795
if api.eth.BlockChain().Config().LatestFork(params.Timestamp) != forks.Prague {
795796
return engine.StatelessPayloadStatusV1{Status: engine.INVALID}, engine.UnsupportedFork.With(errors.New("executeStatelessPayloadV4 must only be called for prague payloads"))
796797
}
798+
requests := convertRequests(executionRequests)
797799
return api.executeStatelessPayload(params, versionedHashes, beaconRoot, requests, opaqueWitness)
798800
}
799801

@@ -929,7 +931,6 @@ func (api *ConsensusAPI) newPayload(params engine.ExecutableData, versionedHashe
929931

930932
func (api *ConsensusAPI) executeStatelessPayload(params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, requests [][]byte, opaqueWitness hexutil.Bytes) (engine.StatelessPayloadStatusV1, error) {
931933
log.Trace("Engine API request received", "method", "ExecuteStatelessPayload", "number", params.Number, "hash", params.BlockHash)
932-
933934
block, err := engine.ExecutableDataToBlockNoHash(params, versionedHashes, beaconRoot, requests)
934935
if err != nil {
935936
bgu := "nil"
@@ -1254,3 +1255,15 @@ func getBody(block *types.Block) *engine.ExecutionPayloadBody {
12541255

12551256
return &result
12561257
}
1258+
1259+
// convertRequests converts a hex requests slice to plain [][]byte.
1260+
func convertRequests(hex []hexutil.Bytes) [][]byte {
1261+
if hex == nil {
1262+
return nil
1263+
}
1264+
req := make([][]byte, len(hex))
1265+
for i := range hex {
1266+
req[i] = hex[i]
1267+
}
1268+
return req
1269+
}

eth/catalyst/simulated_beacon.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,8 @@ func (c *SimulatedBeacon) sealBlock(withdrawals []*types.Withdrawal, timestamp u
220220
}
221221
}
222222
// Mark the payload as canon
223-
if _, err = c.engineAPI.NewPayloadV4(*payload, blobHashes, &common.Hash{}, envelope.Requests); err != nil {
223+
_, err = c.engineAPI.newPayload(*payload, blobHashes, &common.Hash{}, envelope.Requests, false)
224+
if err != nil {
224225
return err
225226
}
226227
c.setCurrentState(payload.BlockHash, finalizedHash)

0 commit comments

Comments
 (0)