@@ -16,7 +16,6 @@ import (
1616 "github.com/multiversx/mx-chain-core-go/core/check"
1717 "github.com/multiversx/mx-chain-core-go/data"
1818 "github.com/multiversx/mx-chain-core-go/data/api"
19- "github.com/multiversx/mx-chain-core-go/data/block"
2019 "github.com/multiversx/mx-chain-core-go/data/endProcess"
2120 "github.com/multiversx/mx-chain-core-go/data/esdt"
2221 "github.com/multiversx/mx-chain-core-go/data/guardians"
@@ -1289,18 +1288,37 @@ func (n *Node) getMetaFirstNonceOfEpoch(epoch uint32) (*common.EpochStartDataAPI
12891288 return nil , fmt .Errorf ("cannot load epoch start block for epoch %d (%w)" , epoch , err )
12901289 }
12911290
1292- var metaBlock block.MetaBlock
1293- err = n .coreComponents .InternalMarshalizer ().Unmarshal (& metaBlock , result )
1291+ metaBlock , err := process .UnmarshalMetaHeader (n .coreComponents .InternalMarshalizer (), result )
12941292 if err != nil {
12951293 return nil , err
12961294 }
12971295
1298- return n .prepareEpochStartDataResponse (& metaBlock ), nil
1296+ return n .prepareEpochStartDataResponse (metaBlock ), nil
1297+ }
1298+
1299+ func (n * Node ) getLastExecutionRootHashOnHeader (
1300+ header data.HeaderHandler ,
1301+ ) []byte {
1302+ rootHash := header .GetRootHash ()
1303+ if ! header .IsHeaderV3 () {
1304+ return rootHash
1305+ }
1306+
1307+ lastExecRes , err := common .ExtractBaseExecutionResultHandler (header .GetLastExecutionResultHandler ())
1308+ if err != nil {
1309+ // this should not happen, last execution result should be set on header v3
1310+ log .Error ("failed to get last execution result on header" , "error" , err )
1311+ return rootHash
1312+ }
1313+
1314+ return lastExecRes .GetRootHash ()
12991315}
13001316
13011317func (n * Node ) prepareEpochStartDataResponse (header data.HeaderHandler ) * common.EpochStartDataAPI {
13021318 timestampSec , timestampMs , _ := common .GetHeaderTimestamps (header , n .coreComponents .EnableEpochsHandler ())
13031319
1320+ rootHash := n .getLastExecutionRootHashOnHeader (header )
1321+
13041322 response := & common.EpochStartDataAPI {
13051323 Nonce : header .GetNonce (),
13061324 Round : header .GetRound (),
@@ -1309,7 +1327,7 @@ func (n *Node) prepareEpochStartDataResponse(header data.HeaderHandler) *common.
13091327 TimestampMs : int64 (timestampMs ),
13101328 Epoch : header .GetEpoch (),
13111329 PrevBlockHash : hex .EncodeToString (header .GetPrevHash ()),
1312- StateRootHash : hex .EncodeToString (header . GetRootHash () ),
1330+ StateRootHash : hex .EncodeToString (rootHash ),
13131331 }
13141332
13151333 if header .GetAdditionalData () != nil {
0 commit comments