diff --git a/docs/notifications.md b/docs/notifications.md
index 119130ed1..cd47e841b 100644
--- a/docs/notifications.md
+++ b/docs/notifications.md
@@ -67,11 +67,11 @@ omitted if empty).
 
 Recognized stream names:
  * `block_added`
-   Filter: `primary` as an integer with primary (speaker) node index from
-   ConsensusData and/or `since` field as an integer value with block
-   index starting from which new block notifications will be received and/or
-   `till` field as an integer values containing block index till which new
-   block notifications will be received.
+   Filter: `primary` as an integer with a valid range of 0-255 with 
+   primary (speaker) node index from ConsensusData and/or `since` field as 
+   an integer value with block index starting from which new block 
+   notifications will be received and/or `till` field as an integer values
+   containing block index till which new block notifications will be received.
  * `header_of_added_block`
    Filter: `primary` as an integer with primary (speaker) node index from
    ConsensusData and/or `since` field as an integer value with header
diff --git a/pkg/neorpc/filters.go b/pkg/neorpc/filters.go
index 255d94e86..a85bfd88c 100644
--- a/pkg/neorpc/filters.go
+++ b/pkg/neorpc/filters.go
@@ -11,7 +11,7 @@ type (
 	// since/till the specified index inclusively). nil value treated as missing
 	// filter.
 	BlockFilter struct {
-		Primary *int    `json:"primary,omitempty"`
+		Primary *byte   `json:"primary,omitempty"`
 		Since   *uint32 `json:"since,omitempty"`
 		Till    *uint32 `json:"till,omitempty"`
 	}
@@ -56,7 +56,7 @@ func (f *BlockFilter) Copy() *BlockFilter {
 	}
 	var res = new(BlockFilter)
 	if f.Primary != nil {
-		res.Primary = new(int)
+		res.Primary = new(byte)
 		*res.Primary = *f.Primary
 	}
 	if f.Since != nil {
diff --git a/pkg/neorpc/filters_test.go b/pkg/neorpc/filters_test.go
index 8f725a588..e38591c5d 100644
--- a/pkg/neorpc/filters_test.go
+++ b/pkg/neorpc/filters_test.go
@@ -16,12 +16,12 @@ func TestBlockFilterCopy(t *testing.T) {
 	tf = bf.Copy()
 	require.Equal(t, bf, tf)
 
-	bf.Primary = new(int)
+	bf.Primary = new(byte)
 	*bf.Primary = 42
 
 	tf = bf.Copy()
 	require.Equal(t, bf, tf)
-	*bf.Primary = 100500
+	*bf.Primary = 100
 	require.NotEqual(t, bf, tf)
 
 	bf.Since = new(uint32)
diff --git a/pkg/neorpc/rpcevent/filter.go b/pkg/neorpc/rpcevent/filter.go
index f2be233ad..90696a2f0 100644
--- a/pkg/neorpc/rpcevent/filter.go
+++ b/pkg/neorpc/rpcevent/filter.go
@@ -42,7 +42,7 @@ func Matches(f Comparator, r Container) bool {
 		} else {
 			b = &r.EventPayload().(*block.Block).Header
 		}
-		primaryOk := filt.Primary == nil || *filt.Primary == int(b.PrimaryIndex)
+		primaryOk := filt.Primary == nil || *filt.Primary == b.PrimaryIndex
 		sinceOk := filt.Since == nil || *filt.Since <= b.Index
 		tillOk := filt.Till == nil || b.Index <= *filt.Till
 		return primaryOk && sinceOk && tillOk
diff --git a/pkg/neorpc/rpcevent/filter_test.go b/pkg/neorpc/rpcevent/filter_test.go
index 6d8d33aad..956ab2686 100644
--- a/pkg/neorpc/rpcevent/filter_test.go
+++ b/pkg/neorpc/rpcevent/filter_test.go
@@ -40,8 +40,8 @@ func (c testContainer) EventPayload() any {
 }
 
 func TestMatches(t *testing.T) {
-	primary := 1
-	badPrimary := 2
+	primary := byte(1)
+	badPrimary := byte(2)
 	index := uint32(5)
 	badHigherIndex := uint32(6)
 	badLowerIndex := index - 1
diff --git a/pkg/rpcclient/wsclient_test.go b/pkg/rpcclient/wsclient_test.go
index 8247901ac..a983e0609 100644
--- a/pkg/rpcclient/wsclient_test.go
+++ b/pkg/rpcclient/wsclient_test.go
@@ -381,7 +381,7 @@ func TestWSFilteredSubscriptions(t *testing.T) {
 	}{
 		{"block header primary",
 			func(t *testing.T, wsc *WSClient) {
-				primary := 3
+				primary := byte(3)
 				_, err := wsc.ReceiveHeadersOfAddedBlocks(&neorpc.BlockFilter{Primary: &primary}, make(chan *block.Header))
 				require.NoError(t, err)
 			},
@@ -389,7 +389,7 @@ func TestWSFilteredSubscriptions(t *testing.T) {
 				param := p.Value(1)
 				filt := new(neorpc.BlockFilter)
 				require.NoError(t, json.Unmarshal(param.RawMessage, filt))
-				require.Equal(t, 3, *filt.Primary)
+				require.Equal(t, byte(3), *filt.Primary)
 				require.Equal(t, (*uint32)(nil), filt.Since)
 				require.Equal(t, (*uint32)(nil), filt.Till)
 			},
@@ -404,7 +404,7 @@ func TestWSFilteredSubscriptions(t *testing.T) {
 				param := p.Value(1)
 				filt := new(neorpc.BlockFilter)
 				require.NoError(t, json.Unmarshal(param.RawMessage, filt))
-				require.Equal(t, (*int)(nil), filt.Primary)
+				require.Equal(t, (*byte)(nil), filt.Primary)
 				require.Equal(t, uint32(3), *filt.Since)
 				require.Equal(t, (*uint32)(nil), filt.Till)
 			},
@@ -419,7 +419,7 @@ func TestWSFilteredSubscriptions(t *testing.T) {
 				param := p.Value(1)
 				filt := new(neorpc.BlockFilter)
 				require.NoError(t, json.Unmarshal(param.RawMessage, filt))
-				require.Equal(t, (*int)(nil), filt.Primary)
+				require.Equal(t, (*byte)(nil), filt.Primary)
 				require.Equal(t, (*uint32)(nil), filt.Since)
 				require.Equal(t, (uint32)(3), *filt.Till)
 			},
@@ -428,7 +428,7 @@ func TestWSFilteredSubscriptions(t *testing.T) {
 			func(t *testing.T, wsc *WSClient) {
 				var (
 					since   uint32 = 3
-					primary        = 2
+					primary        = byte(2)
 					till    uint32 = 5
 				)
 				_, err := wsc.ReceiveHeadersOfAddedBlocks(&neorpc.BlockFilter{
@@ -442,14 +442,14 @@ func TestWSFilteredSubscriptions(t *testing.T) {
 				param := p.Value(1)
 				filt := new(neorpc.BlockFilter)
 				require.NoError(t, json.Unmarshal(param.RawMessage, filt))
-				require.Equal(t, 2, *filt.Primary)
+				require.Equal(t, byte(2), *filt.Primary)
 				require.Equal(t, uint32(3), *filt.Since)
 				require.Equal(t, uint32(5), *filt.Till)
 			},
 		},
 		{"blocks primary",
 			func(t *testing.T, wsc *WSClient) {
-				primary := 3
+				primary := byte(3)
 				_, err := wsc.ReceiveBlocks(&neorpc.BlockFilter{Primary: &primary}, make(chan *block.Block))
 				require.NoError(t, err)
 			},
@@ -457,7 +457,7 @@ func TestWSFilteredSubscriptions(t *testing.T) {
 				param := p.Value(1)
 				filt := new(neorpc.BlockFilter)
 				require.NoError(t, json.Unmarshal(param.RawMessage, filt))
-				require.Equal(t, 3, *filt.Primary)
+				require.Equal(t, byte(3), *filt.Primary)
 				require.Equal(t, (*uint32)(nil), filt.Since)
 				require.Equal(t, (*uint32)(nil), filt.Till)
 			},
@@ -472,7 +472,7 @@ func TestWSFilteredSubscriptions(t *testing.T) {
 				param := p.Value(1)
 				filt := new(neorpc.BlockFilter)
 				require.NoError(t, json.Unmarshal(param.RawMessage, filt))
-				require.Equal(t, (*int)(nil), filt.Primary)
+				require.Equal(t, (*byte)(nil), filt.Primary)
 				require.Equal(t, uint32(3), *filt.Since)
 				require.Equal(t, (*uint32)(nil), filt.Till)
 			},
@@ -487,7 +487,7 @@ func TestWSFilteredSubscriptions(t *testing.T) {
 				param := p.Value(1)
 				filt := new(neorpc.BlockFilter)
 				require.NoError(t, json.Unmarshal(param.RawMessage, filt))
-				require.Equal(t, (*int)(nil), filt.Primary)
+				require.Equal(t, (*byte)(nil), filt.Primary)
 				require.Equal(t, (*uint32)(nil), filt.Since)
 				require.Equal(t, (uint32)(3), *filt.Till)
 			},
@@ -496,7 +496,7 @@ func TestWSFilteredSubscriptions(t *testing.T) {
 			func(t *testing.T, wsc *WSClient) {
 				var (
 					since   uint32 = 3
-					primary        = 2
+					primary        = byte(2)
 					till    uint32 = 5
 				)
 				_, err := wsc.ReceiveBlocks(&neorpc.BlockFilter{
@@ -510,7 +510,7 @@ func TestWSFilteredSubscriptions(t *testing.T) {
 				param := p.Value(1)
 				filt := new(neorpc.BlockFilter)
 				require.NoError(t, json.Unmarshal(param.RawMessage, filt))
-				require.Equal(t, 2, *filt.Primary)
+				require.Equal(t, byte(2), *filt.Primary)
 				require.Equal(t, uint32(3), *filt.Since)
 				require.Equal(t, uint32(5), *filt.Till)
 			},
diff --git a/pkg/services/rpcsrv/client_test.go b/pkg/services/rpcsrv/client_test.go
index b77b44b0f..8cdc51689 100644
--- a/pkg/services/rpcsrv/client_test.go
+++ b/pkg/services/rpcsrv/client_test.go
@@ -2113,9 +2113,9 @@ func TestWSClient_SubscriptionsCompat(t *testing.T) {
 	blocks := getTestBlocks(t)
 	bCount := uint32(0)
 
-	getData := func(t *testing.T) (*block.Block, int, util.Uint160, string, string) {
+	getData := func(t *testing.T) (*block.Block, byte, util.Uint160, string, string) {
 		b1 := blocks[bCount]
-		primary := int(b1.PrimaryIndex)
+		primary := b1.PrimaryIndex
 		tx := b1.Transactions[0]
 		sender := tx.Sender()
 		ntfName := "Transfer"