From 1ab258885cc1162524ac3b2663f383d0f6e1511f Mon Sep 17 00:00:00 2001 From: jules01 Date: Tue, 28 Mar 2023 12:30:23 +0300 Subject: [PATCH 1/2] - fix rewards broadcast by not filtering out the metachain shard. The metachain nodes will be able to broadcast them without the exception. - fixed a print in miniblock tracker --- .../interceptedRewardTransaction.go | 5 -- .../interceptedRewardTransaction_test.go | 83 +++++++++++++++++++ process/track/miniBlockTrack.go | 2 +- 3 files changed, 84 insertions(+), 6 deletions(-) diff --git a/process/rewardTransaction/interceptedRewardTransaction.go b/process/rewardTransaction/interceptedRewardTransaction.go index 73e19fed81d..e96a3cf0eca 100644 --- a/process/rewardTransaction/interceptedRewardTransaction.go +++ b/process/rewardTransaction/interceptedRewardTransaction.go @@ -82,11 +82,6 @@ func (inRTx *InterceptedRewardTransaction) processFields(rewardTxBuff []byte) er inRTx.rcvShard = inRTx.coordinator.ComputeId(inRTx.rTx.RcvAddr) inRTx.sndShard = core.MetachainShardId - if inRTx.coordinator.SelfId() == core.MetachainShardId { - inRTx.isForCurrentShard = false - return nil - } - isForCurrentShardRecv := inRTx.rcvShard == inRTx.coordinator.SelfId() isForCurrentShardSender := inRTx.sndShard == inRTx.coordinator.SelfId() inRTx.isForCurrentShard = isForCurrentShardRecv || isForCurrentShardSender diff --git a/process/rewardTransaction/interceptedRewardTransaction_test.go b/process/rewardTransaction/interceptedRewardTransaction_test.go index 1fe5c3d1412..7a6698a1e40 100644 --- a/process/rewardTransaction/interceptedRewardTransaction_test.go +++ b/process/rewardTransaction/interceptedRewardTransaction_test.go @@ -1,6 +1,7 @@ package rewardTransaction_test import ( + "bytes" "fmt" "math/big" "testing" @@ -317,6 +318,88 @@ func TestNewInterceptedRewardTransaction_CheckValidityShouldWork(t *testing.T) { assert.Nil(t, err) } +func TestNewInterceptedRewardTransaction_IsForCurrentShard(t *testing.T) { + t.Parallel() + + receiverAddress := []byte("receiver address") + testShardID := uint32(2) + value := big.NewInt(100) + rewTx := rewardTx.RewardTx{ + Round: 0, + Epoch: 0, + Value: value, + RcvAddr: receiverAddress, + } + + mockShardCoordinator := &mock.ShardCoordinatorStub{} + marshalizer := &mock.MarshalizerMock{} + txBuff, _ := marshalizer.Marshal(&rewTx) + t.Run("same shard ID with the receiver should return true", func(t *testing.T) { + mockShardCoordinator.ComputeIdCalled = func(address []byte) uint32 { + if bytes.Equal(address, receiverAddress) { + return testShardID + } + + return 0 + } + mockShardCoordinator.SelfIdCalled = func() uint32 { + return testShardID + } + + irt, err := rewardTransaction.NewInterceptedRewardTransaction( + txBuff, + marshalizer, + &hashingMocks.HasherMock{}, + createMockPubkeyConverter(), + mockShardCoordinator) + assert.Nil(t, err) + + assert.True(t, irt.IsForCurrentShard()) + }) + t.Run("metachain should return true", func(t *testing.T) { + mockShardCoordinator.ComputeIdCalled = func(address []byte) uint32 { + if bytes.Equal(address, receiverAddress) { + return testShardID + } + + return 0 + } + mockShardCoordinator.SelfIdCalled = func() uint32 { + return core.MetachainShardId + } + + irt, err := rewardTransaction.NewInterceptedRewardTransaction( + txBuff, + marshalizer, + &hashingMocks.HasherMock{}, + createMockPubkeyConverter(), + mockShardCoordinator) + assert.Nil(t, err) + assert.True(t, irt.IsForCurrentShard()) + }) + t.Run("different shard should return true", func(t *testing.T) { + mockShardCoordinator.ComputeIdCalled = func(address []byte) uint32 { + if bytes.Equal(address, receiverAddress) { + return testShardID + } + + return 0 + } + mockShardCoordinator.SelfIdCalled = func() uint32 { + return testShardID + 1 // different with the receiver but not metachain + } + + irt, err := rewardTransaction.NewInterceptedRewardTransaction( + txBuff, + marshalizer, + &hashingMocks.HasherMock{}, + createMockPubkeyConverter(), + mockShardCoordinator) + assert.Nil(t, err) + assert.False(t, irt.IsForCurrentShard()) + }) +} + func TestInterceptedRewardTransaction_Type(t *testing.T) { t.Parallel() diff --git a/process/track/miniBlockTrack.go b/process/track/miniBlockTrack.go index 538dbdf0740..900846f67ff 100644 --- a/process/track/miniBlockTrack.go +++ b/process/track/miniBlockTrack.go @@ -73,7 +73,7 @@ func (mbt *miniBlockTrack) receivedMiniBlock(key []byte, value interface{}) { return } - log.Trace("miniBlockTrack.receivedMiniBlock", + log.Debug("received miniblock from network in block tracker", "hash", key, "sender", miniBlock.SenderShardID, "receiver", miniBlock.ReceiverShardID, From 00d3cfdb41693b4c18e7e71c452db9688560319b Mon Sep 17 00:00:00 2001 From: jules01 Date: Tue, 28 Mar 2023 12:42:40 +0300 Subject: [PATCH 2/2] - fixed test name --- process/rewardTransaction/interceptedRewardTransaction_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/process/rewardTransaction/interceptedRewardTransaction_test.go b/process/rewardTransaction/interceptedRewardTransaction_test.go index 7a6698a1e40..eba6830841a 100644 --- a/process/rewardTransaction/interceptedRewardTransaction_test.go +++ b/process/rewardTransaction/interceptedRewardTransaction_test.go @@ -377,7 +377,7 @@ func TestNewInterceptedRewardTransaction_IsForCurrentShard(t *testing.T) { assert.Nil(t, err) assert.True(t, irt.IsForCurrentShard()) }) - t.Run("different shard should return true", func(t *testing.T) { + t.Run("different shard should return false", func(t *testing.T) { mockShardCoordinator.ComputeIdCalled = func(address []byte) uint32 { if bytes.Equal(address, receiverAddress) { return testShardID