Skip to content

Commit b30bc35

Browse files
committed
Add AffinityFilter::from_topics and use it in build_combined_affinity_filter
1 parent d6dad2b commit b30bc35

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

lib/src/network/codec/affinity.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,20 @@ impl AffinityFilter {
148148
AffinityFilter { bloom, seed }
149149
}
150150

151+
pub fn from_topics<'a>(
152+
topics: impl Iterator<Item = &'a [u8; 32]>,
153+
seed: u128,
154+
false_positive_rate: f64,
155+
) -> Self {
156+
let topics: Vec<&[u8; 32]> = topics.collect();
157+
let count = topics.len().max(1);
158+
let mut filter = Self::new(seed, false_positive_rate, count);
159+
for topic in topics {
160+
filter.insert(topic);
161+
}
162+
filter
163+
}
164+
151165
pub fn decode(data: &[u8]) -> Result<Self, DecodeAffinityFilterError> {
152166
let encoded = EncodedBloomFilter::decode(data)?;
153167
if encoded.bits.is_empty() {

light-base/src/json_rpc_service/background.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,10 @@ pub(super) async fn run<TPlat: PlatformRef>(
773773
if matches!(version, network_service::StatementProtocolVersion::V2) {
774774
me.v2_statement_peers.insert(peer_id.clone());
775775
if !me.statement_subscriptions.is_empty() {
776-
let spc = me.statement_protocol_config.as_ref().expect("V2 peers require statement protocol; qed");
776+
let spc = me
777+
.statement_protocol_config
778+
.as_ref()
779+
.expect("V2 peers require statement protocol; qed");
777780
let combined_filter = build_combined_affinity_filter(
778781
&me.statement_subscriptions,
779782
spc.bloom_seed(),
@@ -2920,11 +2923,14 @@ pub(super) async fn run<TPlat: PlatformRef>(
29202923
.insert(subscription_id.clone(), filter);
29212924

29222925
if !me.v2_statement_peers.is_empty() {
2923-
let fpr = me.statement_protocol_config.as_ref().expect("V2 peers require statement protocol; qed").false_positive_rate();
2926+
let spc = me
2927+
.statement_protocol_config
2928+
.as_ref()
2929+
.expect("V2 peers require statement protocol; qed");
29242930
let combined_filter = build_combined_affinity_filter(
29252931
&me.statement_subscriptions,
2926-
me.bloom_seed,
2927-
fpr,
2932+
spc.bloom_seed(),
2933+
spc.false_positive_rate(),
29282934
);
29292935
for peer_id in me.v2_statement_peers.clone() {
29302936
let _ = me
@@ -2949,11 +2955,14 @@ pub(super) async fn run<TPlat: PlatformRef>(
29492955
let existed = me.statement_subscriptions.remove(&subscription).is_some();
29502956

29512957
if existed && !me.v2_statement_peers.is_empty() {
2952-
let fpr = me.statement_protocol_config.as_ref().expect("V2 peers require statement protocol; qed").false_positive_rate();
2958+
let spc = me
2959+
.statement_protocol_config
2960+
.as_ref()
2961+
.expect("V2 peers require statement protocol; qed");
29532962
let combined_filter = build_combined_affinity_filter(
29542963
&me.statement_subscriptions,
2955-
me.bloom_seed,
2956-
fpr,
2964+
spc.bloom_seed(),
2965+
spc.false_positive_rate(),
29572966
);
29582967
for peer_id in me.v2_statement_peers.clone() {
29592968
let _ = me
@@ -6107,10 +6116,6 @@ fn build_combined_affinity_filter(
61076116
) -> network_service::AffinityFilter {
61086117
use smoldot::json_rpc::methods::TopicFilter;
61096118

6110-
if subscriptions.is_empty() {
6111-
return network_service::AffinityFilter::new(seed, false_positive_rate, 1);
6112-
}
6113-
61146119
let mut all_topics: Vec<&[u8; 32]> = Vec::new();
61156120

61166121
for filter in subscriptions.values() {
@@ -6124,10 +6129,5 @@ fn build_combined_affinity_filter(
61246129
}
61256130
}
61266131

6127-
let count = all_topics.len().max(1);
6128-
let mut affinity = network_service::AffinityFilter::new(seed, false_positive_rate, count);
6129-
for topic in all_topics {
6130-
affinity.insert(topic);
6131-
}
6132-
affinity
6132+
network_service::AffinityFilter::from_topics(all_topics.into_iter(), seed, false_positive_rate)
61336133
}

0 commit comments

Comments
 (0)