Skip to content

Commit 1e23047

Browse files
authored
Merge pull request #7777 from multiversx/fix-api-meta-block
Fix api epoch start meta block root hash
2 parents bd57fc8 + dd06a35 commit 1e23047

File tree

6 files changed

+39
-22
lines changed

6 files changed

+39
-22
lines changed

epochStart/bootstrap/process.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -914,7 +914,11 @@ func (e *epochStartBootstrap) syncEpochStartMetaHeaders(
914914

915915
if meta.GetEpoch() == e.startEpoch+1 {
916916
// for genesis block there is no epoch start header to sync, so we set an empty meta block
917-
syncedHeaders[string(meta.GetEpochStartHandler().GetEconomicsHandler().GetPrevEpochStartHash())] = &block.MetaBlock{}
917+
var metaBlock data.MetaHeaderHandler = &block.MetaBlock{}
918+
if meta.IsHeaderV3() {
919+
metaBlock = &block.MetaBlockV3{}
920+
}
921+
syncedHeaders[string(meta.GetEpochStartHandler().GetEconomicsHandler().GetPrevEpochStartHash())] = metaBlock
918922
}
919923

920924
return syncedHeaders, nil

epochStart/bootstrap/storageProcess.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,11 @@ func (sesb *storageEpochStartBootstrap) syncHeadersFromStorage(meta data.MetaHea
397397
}
398398

399399
if meta.GetEpoch() == sesb.startEpoch+1 {
400-
syncedHeaders[string(meta.GetEpochStartHandler().GetEconomicsHandler().GetPrevEpochStartHash())] = &block.MetaBlock{}
400+
var metaBlock data.MetaHeaderHandler = &block.MetaBlock{}
401+
if meta.IsHeaderV3() {
402+
metaBlock = &block.MetaBlockV3{}
403+
}
404+
syncedHeaders[string(meta.GetEpochStartHandler().GetEconomicsHandler().GetPrevEpochStartHash())] = metaBlock
401405
}
402406

403407
return syncedHeaders, nil

epochStart/shardchain/trigger.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -956,12 +956,11 @@ func (t *trigger) getHeaderWithHashFromPool(neededHash []byte) data.HeaderHandle
956956
func (t *trigger) getHeaderWithHashFromStorage(neededHash []byte) data.HeaderHandler {
957957
storageData, err := t.metaHdrStorage.Get(neededHash)
958958
if err == nil {
959-
var neededHdr block.MetaBlock
960-
err = t.marshaller.Unmarshal(&neededHdr, storageData)
959+
neededHdr, err := process.UnmarshalMetaHeader(t.marshaller, storageData)
961960
if err == nil {
962-
t.mapHashHdr[string(neededHash)] = &neededHdr
963-
t.mapNonceHashes[neededHdr.Nonce] = append(t.mapNonceHashes[neededHdr.Nonce], string(neededHash))
964-
return &neededHdr
961+
t.mapHashHdr[string(neededHash)] = neededHdr
962+
t.mapNonceHashes[neededHdr.GetNonce()] = append(t.mapNonceHashes[neededHdr.GetNonce()], string(neededHash))
963+
return neededHdr
965964
}
966965
}
967966

node/external/blockAPI/metaBlock.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,6 @@ func (mbp *metaAPIBlockProcessor) convertMetaBlockBytesToAPIBlock(hash []byte, b
246246
DeveloperFeesInEpoch: blockHeader.GetDevFeesInEpoch().String(),
247247
Timestamp: int64(timestampSec),
248248
TimestampMs: int64(timestampMs),
249-
StateRootHash: hex.EncodeToString(blockHeader.GetRootHash()),
250249
Status: BlockStatusOnChain,
251250
LeaderSignature: hex.EncodeToString(blockHeader.GetLeaderSignature()),
252251
ChainID: string(blockHeader.GetChainID()),

node/node.go

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

13011317
func (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 {

process/sync/metablock.go

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,7 @@ func (boot *MetaBootstrap) setLastEpochStartRound() {
168168
return
169169
}
170170

171-
epochStartMetaBlock := &block.MetaBlock{}
172-
err = boot.marshalizer.Unmarshal(epochStartMetaBlock, epochStartHdr)
171+
epochStartMetaBlock, err := process.UnmarshalMetaHeader(boot.marshalizer, epochStartHdr)
173172
if err != nil {
174173
return
175174
}
@@ -235,13 +234,7 @@ func (boot *MetaBootstrap) getPrevHeader(
235234
return nil, err
236235
}
237236

238-
prevHeader := &block.MetaBlock{}
239-
err = boot.marshalizer.Unmarshal(prevHeader, buffHeader)
240-
if err != nil {
241-
return nil, err
242-
}
243-
244-
return prevHeader, nil
237+
return process.UnmarshalMetaHeader(boot.marshalizer, buffHeader)
245238
}
246239

247240
func (boot *MetaBootstrap) getCurrHeader() (data.HeaderHandler, error) {

0 commit comments

Comments
 (0)