@ -593,8 +593,7 @@ func (api *ConsensusAPI) NewPayloadV3(params engine.ExecutableData, versionedHas
}
// NewPayloadV4 creates an Eth1 block, inserts it in the chain, and returns the status of the chain.
// NewPayloadV4 creates an Eth1 block, inserts it in the chain, and returns the status of the chain.
func ( api * ConsensusAPI ) NewPayloadV4 ( params engine . ExecutableData , versionedHashes [ ] common . Hash , beaconRoot * common . Hash , requests [ ] [ ] byte ) ( engine . PayloadStatusV1 , error ) {
func ( api * ConsensusAPI ) NewPayloadV4 ( params engine . ExecutableData , versionedHashes [ ] common . Hash , beaconRoot * common . Hash , executionRequests [ ] hexutil . Bytes ) ( engine . PayloadStatusV1 , error ) {
if params . Withdrawals == nil {
return engine . PayloadStatusV1 { Status : engine . INVALID } , engine . InvalidParams . With ( errors . New ( "nil withdrawals post-shanghai" ) )
}
@ -611,13 +610,14 @@ func (api *ConsensusAPI) NewPayloadV4(params engine.ExecutableData, versionedHas
if beaconRoot == nil {
return engine . PayloadStatusV1 { Status : engine . INVALID } , engine . InvalidParams . With ( errors . New ( "nil beaconRoot post-cancun" ) )
}
if r equests == nil {
if executionR equests == nil {
return engine . PayloadStatusV1 { Status : engine . INVALID } , engine . InvalidParams . With ( errors . New ( "nil executionRequests post-prague" ) )
}
if api . eth . BlockChain ( ) . Config ( ) . LatestFork ( params . Timestamp ) != forks . Prague {
return engine . PayloadStatusV1 { Status : engine . INVALID } , engine . UnsupportedFork . With ( errors . New ( "newPayloadV4 must only be called for prague payloads" ) )
}
requests := convertRequests ( executionRequests )
return api . newPayload ( params , versionedHashes , beaconRoot , requests , false )
}
@ -682,7 +682,7 @@ func (api *ConsensusAPI) NewPayloadWithWitnessV3(params engine.ExecutableData, v
// NewPayloadWithWitnessV4 is analogous to NewPayloadV4, only it also generates
// and returns a stateless witness after running the payload.
func ( api * ConsensusAPI ) NewPayloadWithWitnessV4 ( params engine . ExecutableData , versionedHashes [ ] common . Hash , beaconRoot * common . Hash , requests [ ] [ ] byte ) ( engine . PayloadStatusV1 , error ) {
func ( api * ConsensusAPI ) NewPayloadWithWitnessV4 ( params engine . ExecutableData , versionedHashes [ ] common . Hash , beaconRoot * common . Hash , executionRequests [ ] hexutil . Bytes ) ( engine . PayloadStatusV1 , error ) {
if params . Withdrawals == nil {
return engine . PayloadStatusV1 { Status : engine . INVALID } , engine . InvalidParams . With ( errors . New ( "nil withdrawals post-shanghai" ) )
}
@ -699,13 +699,14 @@ func (api *ConsensusAPI) NewPayloadWithWitnessV4(params engine.ExecutableData, v
if beaconRoot == nil {
return engine . PayloadStatusV1 { Status : engine . INVALID } , engine . InvalidParams . With ( errors . New ( "nil beaconRoot post-cancun" ) )
}
if r equests == nil {
if executionR equests == nil {
return engine . PayloadStatusV1 { Status : engine . INVALID } , engine . InvalidParams . With ( errors . New ( "nil executionRequests post-prague" ) )
}
if api . eth . BlockChain ( ) . Config ( ) . LatestFork ( params . Timestamp ) != forks . Prague {
return engine . PayloadStatusV1 { Status : engine . INVALID } , engine . UnsupportedFork . With ( errors . New ( "newPayloadWithWitnessV4 must only be called for prague payloads" ) )
}
requests := convertRequests ( executionRequests )
return api . newPayload ( params , versionedHashes , beaconRoot , requests , true )
}
@ -770,7 +771,7 @@ func (api *ConsensusAPI) ExecuteStatelessPayloadV3(params engine.ExecutableData,
// ExecuteStatelessPayloadV4 is analogous to NewPayloadV4, only it operates in
// a stateless mode on top of a provided witness instead of the local database.
func ( api * ConsensusAPI ) ExecuteStatelessPayloadV4 ( params engine . ExecutableData , versionedHashes [ ] common . Hash , beaconRoot * common . Hash , requests [ ] [ ] byte , opaqueWitness hexutil . Bytes ) ( engine . StatelessPayloadStatusV1 , error ) {
func ( api * ConsensusAPI ) ExecuteStatelessPayloadV4 ( params engine . ExecutableData , versionedHashes [ ] common . Hash , beaconRoot * common . Hash , executionRequests [ ] hexutil . Bytes , opaqueWitness hexutil . Bytes ) ( engine . StatelessPayloadStatusV1 , error ) {
if params . Withdrawals == nil {
return engine . StatelessPayloadStatusV1 { Status : engine . INVALID } , engine . InvalidParams . With ( errors . New ( "nil withdrawals post-shanghai" ) )
}
@ -787,13 +788,14 @@ func (api *ConsensusAPI) ExecuteStatelessPayloadV4(params engine.ExecutableData,
if beaconRoot == nil {
return engine . StatelessPayloadStatusV1 { Status : engine . INVALID } , engine . InvalidParams . With ( errors . New ( "nil beaconRoot post-cancun" ) )
}
if r equests == nil {
if executionR equests == nil {
return engine . StatelessPayloadStatusV1 { Status : engine . INVALID } , engine . InvalidParams . With ( errors . New ( "nil executionRequests post-prague" ) )
}
if api . eth . BlockChain ( ) . Config ( ) . LatestFork ( params . Timestamp ) != forks . Prague {
return engine . StatelessPayloadStatusV1 { Status : engine . INVALID } , engine . UnsupportedFork . With ( errors . New ( "executeStatelessPayloadV4 must only be called for prague payloads" ) )
}
requests := convertRequests ( executionRequests )
return api . executeStatelessPayload ( params , versionedHashes , beaconRoot , requests , opaqueWitness )
}
@ -929,7 +931,6 @@ func (api *ConsensusAPI) newPayload(params engine.ExecutableData, versionedHashe
func ( api * ConsensusAPI ) executeStatelessPayload ( params engine . ExecutableData , versionedHashes [ ] common . Hash , beaconRoot * common . Hash , requests [ ] [ ] byte , opaqueWitness hexutil . Bytes ) ( engine . StatelessPayloadStatusV1 , error ) {
log . Trace ( "Engine API request received" , "method" , "ExecuteStatelessPayload" , "number" , params . Number , "hash" , params . BlockHash )
block , err := engine . ExecutableDataToBlockNoHash ( params , versionedHashes , beaconRoot , requests )
if err != nil {
bgu := "nil"
@ -1254,3 +1255,15 @@ func getBody(block *types.Block) *engine.ExecutionPayloadBody {
return & result
}
// convertRequests converts a hex requests slice to plain [][]byte.
func convertRequests ( hex [ ] hexutil . Bytes ) [ ] [ ] byte {
if hex == nil {
return nil
}
req := make ( [ ] [ ] byte , len ( hex ) )
for i := range hex {
req [ i ] = hex [ i ]
}
return req
}