Skip to content

Commit 5c624fd

Browse files
authored
Merge pull request #335 from multiversx/extend-block-structure
Extend block structure
2 parents 0a681ee + 58675dd commit 5c624fd

File tree

8 files changed

+52
-45
lines changed

8 files changed

+52
-45
lines changed

data/block.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ type Block struct {
2020
MiniBlocksDetails []*MiniBlocksDetails `json:"miniBlocksDetails,omitempty"`
2121
NotarizedBlocksHashes []string `json:"notarizedBlocksHashes"`
2222
Proposer uint64 `json:"proposer"`
23-
Validators []uint64 `json:"validators"`
23+
Validators []uint64 `json:"validators,omitempty"`
2424
PubKeyBitmap string `json:"pubKeyBitmap"`
2525
Size int64 `json:"size"`
2626
SizeTxs int64 `json:"sizeTxs"`
@@ -51,6 +51,7 @@ type Block struct {
5151
SoftwareVersion string `json:"softwareVersion,omitempty"`
5252
ReceiptsHash string `json:"receiptsHash,omitempty"`
5353
Reserved []byte `json:"reserved,omitempty"`
54+
ProposerBlsKey string `json:"proposerBlsKey,omitempty"`
5455
}
5556

5657
// MiniBlocksDetails is a structure that hold information about mini-blocks execution details

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/gin-gonic/gin v1.10.0
99
github.com/google/uuid v1.6.0
1010
github.com/multiversx/mx-chain-communication-go v1.1.1
11-
github.com/multiversx/mx-chain-core-go v1.2.25-0.20250219104810-75b7a8ff6bbb
11+
github.com/multiversx/mx-chain-core-go v1.2.25-0.20250306125819-46a071b85ade
1212
github.com/multiversx/mx-chain-logger-go v1.0.15
1313
github.com/multiversx/mx-chain-vm-common-go v1.5.16
1414
github.com/prometheus/client_model v0.4.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,8 @@ github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
253253
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
254254
github.com/multiversx/mx-chain-communication-go v1.1.1 h1:y4DoQeQOJTaSUsRzczQFazf8JYQmInddypApqA3AkwM=
255255
github.com/multiversx/mx-chain-communication-go v1.1.1/go.mod h1:WK6bP4pGEHGDDna/AYRIMtl6G9OA0NByI1Lw8PmOnRM=
256-
github.com/multiversx/mx-chain-core-go v1.2.25-0.20250219104810-75b7a8ff6bbb h1:XoFaZ3/KEaI7N0o1gqiek+2s/PlqmcvwukAT4iCvAIM=
257-
github.com/multiversx/mx-chain-core-go v1.2.25-0.20250219104810-75b7a8ff6bbb/go.mod h1:B5zU4MFyJezmEzCsAHE9YNULmGCm2zbPHvl9hazNxmE=
256+
github.com/multiversx/mx-chain-core-go v1.2.25-0.20250306125819-46a071b85ade h1:jLSSdm/X8T2H+I9/+wHvFuS9FBbXjTfNPJYZpzDdj/I=
257+
github.com/multiversx/mx-chain-core-go v1.2.25-0.20250306125819-46a071b85ade/go.mod h1:B5zU4MFyJezmEzCsAHE9YNULmGCm2zbPHvl9hazNxmE=
258258
github.com/multiversx/mx-chain-crypto-go v1.2.12 h1:zWip7rpUS4CGthJxfKn5MZfMfYPjVjIiCID6uX5BSOk=
259259
github.com/multiversx/mx-chain-logger-go v1.0.15 h1:HlNdK8etyJyL9NQ+6mIXyKPEBo+wRqOwi3n+m2QIHXc=
260260
github.com/multiversx/mx-chain-logger-go v1.0.15/go.mod h1:t3PRKaWB1M+i6gUfD27KXgzLJJC+mAQiN+FLlL1yoGQ=

process/elasticproc/block/blockProcessor.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,27 @@ var (
3434
)
3535

3636
type blockProcessor struct {
37-
hasher hashing.Hasher
38-
marshalizer marshal.Marshalizer
37+
hasher hashing.Hasher
38+
marshalizer marshal.Marshalizer
39+
validatorsPubKeyConverter core.PubkeyConverter
3940
}
4041

4142
// NewBlockProcessor will create a new instance of block processor
42-
func NewBlockProcessor(hasher hashing.Hasher, marshalizer marshal.Marshalizer) (*blockProcessor, error) {
43+
func NewBlockProcessor(hasher hashing.Hasher, marshalizer marshal.Marshalizer, validatorsPubKeyConverter core.PubkeyConverter) (*blockProcessor, error) {
4344
if check.IfNil(hasher) {
4445
return nil, indexer.ErrNilHasher
4546
}
4647
if check.IfNil(marshalizer) {
4748
return nil, indexer.ErrNilMarshalizer
4849
}
50+
if check.IfNil(validatorsPubKeyConverter) {
51+
return nil, indexer.ErrNilPubkeyConverter
52+
}
4953

5054
return &blockProcessor{
51-
hasher: hasher,
52-
marshalizer: marshalizer,
55+
hasher: hasher,
56+
marshalizer: marshalizer,
57+
validatorsPubKeyConverter: validatorsPubKeyConverter,
5358
}, nil
5459
}
5560

@@ -75,7 +80,6 @@ func (bp *blockProcessor) PrepareBlockForDB(obh *outport.OutportBlockWithHeader)
7580

7681
sizeTxs := computeSizeOfTransactions(obh.TransactionPool)
7782
miniblocksHashes := bp.getEncodedMBSHashes(obh.BlockData.Body, obh.BlockData.IntraShardMiniBlocks)
78-
leaderIndex := bp.getLeaderIndex(obh.SignersIndexes)
7983

8084
numTxs, notarizedTxs := getTxsCount(obh.Header)
8185
elasticBlock := &data.Block{
@@ -86,7 +90,8 @@ func (bp *blockProcessor) PrepareBlockForDB(obh *outport.OutportBlockWithHeader)
8690
Hash: hex.EncodeToString(obh.BlockData.HeaderHash),
8791
MiniBlocksHashes: miniblocksHashes,
8892
NotarizedBlocksHashes: obh.NotarizedHeadersHashes,
89-
Proposer: leaderIndex,
93+
Proposer: obh.LeaderIndex,
94+
ProposerBlsKey: hex.EncodeToString(obh.LeaderBLSKey),
9095
Validators: obh.SignersIndexes,
9196
PubKeyBitmap: hex.EncodeToString(obh.Header.GetPubKeysBitmap()),
9297
Size: int64(blockSizeInBytes),
@@ -140,13 +145,15 @@ func (bp *blockProcessor) PrepareBlockForDB(obh *outport.OutportBlockWithHeader)
140145
func addProofs(elasticBlock *data.Block, obh *outport.OutportBlockWithHeader) {
141146
if obh.BlockData.HeaderProof != nil {
142147
elasticBlock.Proof = proofToAPIProof(obh.BlockData.HeaderProof)
148+
elasticBlock.PubKeyBitmap = elasticBlock.Proof.PubKeysBitmap
143149
}
144150

145151
prevHeaderProof := obh.Header.GetPreviousProof()
146152
if check.IfNilReflect(prevHeaderProof) {
147153
return
148154
}
149155
elasticBlock.PreviousHeaderProof = proofToAPIProof(prevHeaderProof)
156+
150157
}
151158

152159
func proofToAPIProof(headerProof coreData.HeaderProofHandler) *api.HeaderProof {
@@ -396,14 +403,6 @@ func (bp *blockProcessor) computeBlockSize(headerBytes []byte, body *block.Body)
396403
return blockSize, nil
397404
}
398405

399-
func (bp *blockProcessor) getLeaderIndex(signersIndexes []uint64) uint64 {
400-
if len(signersIndexes) > 0 {
401-
return signersIndexes[0]
402-
}
403-
404-
return 0
405-
}
406-
407406
func computeBlockSearchOrder(header coreData.HeaderHandler) uint64 {
408407
shardIdentifier := createShardIdentifier(header.GetShardID())
409408
stringOrder := fmt.Sprintf("1%02d%d", shardIdentifier, header.GetNonce())

process/elasticproc/block/blockProcessor_test.go

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,34 @@ func TestNewBlockProcessor(t *testing.T) {
2626

2727
tests := []struct {
2828
name string
29-
argsFunc func() (hashing.Hasher, marshal.Marshalizer)
29+
argsFunc func() (hashing.Hasher, marshal.Marshalizer, core.PubkeyConverter)
3030
exErr error
3131
}{
3232
{
3333
name: "NilMarshalizer",
34-
argsFunc: func() (hashing.Hasher, marshal.Marshalizer) {
35-
return &mock.HasherMock{}, nil
34+
argsFunc: func() (hashing.Hasher, marshal.Marshalizer, core.PubkeyConverter) {
35+
return &mock.HasherMock{}, nil, nil
3636
},
3737
exErr: indexer.ErrNilMarshalizer,
3838
},
3939
{
4040
name: "NilHasher",
41-
argsFunc: func() (hashing.Hasher, marshal.Marshalizer) {
42-
return nil, &mock.MarshalizerMock{}
41+
argsFunc: func() (hashing.Hasher, marshal.Marshalizer, core.PubkeyConverter) {
42+
return nil, &mock.MarshalizerMock{}, nil
4343
},
4444
exErr: indexer.ErrNilHasher,
4545
},
46+
{
47+
name: "NilValidatorPubKeyConverter",
48+
argsFunc: func() (hashing.Hasher, marshal.Marshalizer, core.PubkeyConverter) {
49+
return &mock.HasherMock{}, &mock.MarshalizerMock{}, nil
50+
},
51+
exErr: indexer.ErrNilPubkeyConverter,
52+
},
4653
{
4754
name: "ShouldWork",
48-
argsFunc: func() (hashing.Hasher, marshal.Marshalizer) {
49-
return &mock.HasherMock{}, &mock.MarshalizerMock{}
55+
argsFunc: func() (hashing.Hasher, marshal.Marshalizer, core.PubkeyConverter) {
56+
return &mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{}
5057
},
5158
exErr: nil,
5259
},
@@ -61,7 +68,7 @@ func TestNewBlockProcessor(t *testing.T) {
6168
func TestBlockProcessor_PrepareBlockForDBShouldWork(t *testing.T) {
6269
t.Parallel()
6370

64-
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
71+
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
6572

6673
outportBlockWithHeader := &outport.OutportBlockWithHeader{
6774
Header: &dataBlock.Header{
@@ -123,7 +130,7 @@ func TestBlockProcessor_PrepareBlockForDBShouldWork(t *testing.T) {
123130
func TestBlockProcessor_PrepareBlockForDBNilHeader(t *testing.T) {
124131
t.Parallel()
125132

126-
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
133+
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
127134

128135
outportBlockWithHeader := &outport.OutportBlockWithHeader{}
129136
dbBlock, err := bp.PrepareBlockForDB(outportBlockWithHeader)
@@ -134,7 +141,7 @@ func TestBlockProcessor_PrepareBlockForDBNilHeader(t *testing.T) {
134141
func TestBlockProcessor_PrepareBlockForDBNilBody(t *testing.T) {
135142
t.Parallel()
136143

137-
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
144+
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
138145

139146
outportBlockWithHeader := &outport.OutportBlockWithHeader{
140147
Header: &dataBlock.MetaBlock{},
@@ -155,7 +162,7 @@ func TestBlockProcessor_PrepareBlockForDBMarshalFailHeader(t *testing.T) {
155162
MarshalCalled: func(obj interface{}) ([]byte, error) {
156163
return nil, expectedErr
157164
},
158-
})
165+
}, &mock.PubkeyConverterMock{})
159166

160167
outportBlockWithHeader := &outport.OutportBlockWithHeader{
161168
Header: &dataBlock.Header{},
@@ -182,7 +189,7 @@ func TestBlockProcessor_PrepareBlockForDBMarshalFailBlock(t *testing.T) {
182189
MarshalCalled: func(obj interface{}) ([]byte, error) {
183190
return nil, expectedErr
184191
},
185-
})
192+
}, &mock.PubkeyConverterMock{})
186193

187194
outportBlockWithHeader := &outport.OutportBlockWithHeader{
188195
Header: &dataBlock.Header{},
@@ -204,7 +211,7 @@ func TestBlockProcessor_PrepareBlockForDBMarshalFailBlock(t *testing.T) {
204211
func TestBlockProcessor_ComputeHeaderHash(t *testing.T) {
205212
t.Parallel()
206213

207-
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
214+
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
208215

209216
header := &dataBlock.Header{}
210217
hashBytes, err := bp.ComputeHeaderHash(header)
@@ -215,7 +222,7 @@ func TestBlockProcessor_ComputeHeaderHash(t *testing.T) {
215222
func TestBlockProcessor_PrepareBlockForDBEpochStartMeta(t *testing.T) {
216223
t.Parallel()
217224

218-
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
225+
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
219226

220227
header := &dataBlock.MetaBlock{
221228
TxCount: 1000,
@@ -313,7 +320,7 @@ func TestBlockProcessor_PrepareBlockForDBEpochStartMeta(t *testing.T) {
313320
NotarizedBlocksHashes: nil,
314321
Proposer: 0,
315322
Validators: nil,
316-
PubKeyBitmap: "",
323+
PubKeyBitmap: "6269746d617031",
317324
Size: 1090,
318325
SizeTxs: 0,
319326
Timestamp: 0,
@@ -405,7 +412,7 @@ func TestBlockProcessor_PrepareBlockForDBMiniBlocksDetails(t *testing.T) {
405412
t.Parallel()
406413

407414
gogoMarshaller := &marshal.GogoProtoMarshalizer{}
408-
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
415+
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
409416

410417
mbhr := &dataBlock.MiniBlockHeaderReserved{
411418
IndexOfFirstTxProcessed: 0,

process/elasticproc/block/serialize_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
func TestBlockProcessor_SerializeBlockNilElasticBlockErrors(t *testing.T) {
1717
t.Parallel()
1818

19-
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
19+
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
2020

2121
err := bp.SerializeBlock(nil, nil, "")
2222
require.True(t, errors.Is(err, dataindexer.ErrNilElasticBlock))
@@ -25,20 +25,20 @@ func TestBlockProcessor_SerializeBlockNilElasticBlockErrors(t *testing.T) {
2525
func TestBlockProcessor_SerializeBlock(t *testing.T) {
2626
t.Parallel()
2727

28-
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
28+
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
2929

3030
buffSlice := data.NewBufferSlice(data.DefaultMaxBulkSize)
3131
err := bp.SerializeBlock(&data.Block{Nonce: 1}, buffSlice, "blocks")
3232
require.Nil(t, err)
3333
require.Equal(t, `{ "index" : { "_index":"blocks", "_id" : "" } }
34-
{"uuid":"","nonce":1,"round":0,"epoch":0,"miniBlocksHashes":null,"notarizedBlocksHashes":null,"proposer":0,"validators":null,"pubKeyBitmap":"","size":0,"sizeTxs":0,"timestamp":0,"stateRootHash":"","prevHash":"","shardId":0,"txCount":0,"notarizedTxsCount":0,"accumulatedFees":"","developerFees":"","epochStartBlock":false,"searchOrder":0,"gasProvided":0,"gasRefunded":0,"gasPenalized":0,"maxGasLimit":0}
34+
{"uuid":"","nonce":1,"round":0,"epoch":0,"miniBlocksHashes":null,"notarizedBlocksHashes":null,"proposer":0,"pubKeyBitmap":"","size":0,"sizeTxs":0,"timestamp":0,"stateRootHash":"","prevHash":"","shardId":0,"txCount":0,"notarizedTxsCount":0,"accumulatedFees":"","developerFees":"","epochStartBlock":false,"searchOrder":0,"gasProvided":0,"gasRefunded":0,"gasPenalized":0,"maxGasLimit":0}
3535
`, buffSlice.Buffers()[0].String())
3636
}
3737

3838
func TestBlockProcessor_SerializeEpochInfoDataErrors(t *testing.T) {
3939
t.Parallel()
4040

41-
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
41+
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
4242

4343
err := bp.SerializeEpochInfoData(nil, nil, "")
4444
require.Equal(t, dataindexer.ErrNilHeaderHandler, err)
@@ -50,7 +50,7 @@ func TestBlockProcessor_SerializeEpochInfoDataErrors(t *testing.T) {
5050
func TestBlockProcessor_SerializeEpochInfoData(t *testing.T) {
5151
t.Parallel()
5252

53-
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
53+
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
5454

5555
buffSlice := data.NewBufferSlice(data.DefaultMaxBulkSize)
5656
err := bp.SerializeEpochInfoData(&dataBlock.MetaBlock{
@@ -66,7 +66,7 @@ func TestBlockProcessor_SerializeEpochInfoData(t *testing.T) {
6666
func TestBlockProcessor_SerializeBlockEpochStartMeta(t *testing.T) {
6767
t.Parallel()
6868

69-
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
69+
bp, _ := NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
7070

7171
buffSlice := data.NewBufferSlice(data.DefaultMaxBulkSize)
7272
err := bp.SerializeBlock(&data.Block{

process/elasticproc/elasticProcessor_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func createMockElasticProcessorArgs() *ArgElasticProcessor {
6262
balanceConverter, _ := converters.NewBalanceConverter(10)
6363

6464
acp, _ := accounts.NewAccountsProcessor(&mock.PubkeyConverterMock{}, balanceConverter)
65-
bp, _ := block.NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
65+
bp, _ := block.NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
6666
mp, _ := miniblocks.NewMiniblocksProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
6767
vp, _ := validators.NewValidatorsProcessor(mock.NewPubkeyConverterMock(32), 0)
6868
args := logsevents.ArgsLogsAndEventsProcessor{
@@ -244,7 +244,7 @@ func TestElasticProcessor_RemoveHeader(t *testing.T) {
244244
},
245245
}
246246

247-
args.BlockProc, _ = block.NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
247+
args.BlockProc, _ = block.NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
248248

249249
elasticProc, err := NewElasticProcessor(args)
250250
require.NoError(t, err)
@@ -329,7 +329,7 @@ func TestElasticseachDatabaseSaveHeader_RequestError(t *testing.T) {
329329
return localErr
330330
},
331331
}
332-
arguments.BlockProc, _ = block.NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{})
332+
arguments.BlockProc, _ = block.NewBlockProcessor(&mock.HasherMock{}, &mock.MarshalizerMock{}, &mock.PubkeyConverterMock{})
333333
elasticDatabase := newElasticsearchProcessor(dbWriter, arguments)
334334

335335
err := elasticDatabase.SaveHeader(createEmptyOutportBlockWithHeader())

process/elasticproc/factory/elasticProcessorFactory.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func CreateElasticProcessor(arguments ArgElasticProcessorFactory) (dataindexer.E
6666
return nil, err
6767
}
6868

69-
blockProcHandler, err := blockProc.NewBlockProcessor(arguments.Hasher, arguments.Marshalizer)
69+
blockProcHandler, err := blockProc.NewBlockProcessor(arguments.Hasher, arguments.Marshalizer, arguments.ValidatorPubkeyConverter)
7070
if err != nil {
7171
return nil, err
7272
}

0 commit comments

Comments
 (0)