@libp2p/gossipsub 17.0.1 → 17.1.0-ac7305ccf

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,6 +18,38 @@ export declare const GossipsubIDv11 = "/meshsub/1.1.0";
18
18
  * https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.2.md
19
19
  */
20
20
  export declare const GossipsubIDv12 = "/meshsub/1.2.0";
21
+ /**
22
+ * An ordered ladder of gossipsub protocol IDs, oldest to newest. Each version is a
23
+ * superset of the one before it, so a protocol's position on the ladder determines
24
+ * which features it supports - see `protocolSupportsFeature`.
25
+ *
26
+ * New protocol versions must be appended to the end of this list.
27
+ */
28
+ declare const versionLadder: readonly ["/meshsub/1.0.0", "/meshsub/1.1.0", "/meshsub/1.2.0"];
29
+ export type GossipsubVersion = (typeof versionLadder)[number];
30
+ export declare const GossipsubVersionLadder: readonly string[];
31
+ /**
32
+ * Gossipsub protocol features that are only available from a minimum protocol version
33
+ * onward. Used with `protocolSupportsFeature` to gate version-dependent behavior on the
34
+ * protocol negotiated with a peer, instead of comparing protocol IDs for equality.
35
+ */
36
+ export declare enum GossipsubFeature {
37
+ /**
38
+ * PRUNE messages carry backoff and peer exchange info (gossipsub v1.1+)
39
+ */
40
+ Backoff = "Backoff",
41
+ /**
42
+ * IDONTWANT control messages (gossipsub v1.2+)
43
+ */
44
+ IDontWant = "IDontWant"
45
+ }
46
+ /**
47
+ * Returns true when `protocol` is a gossipsub version that supports `feature` - that is,
48
+ * when it sits at or above the feature's minimum version on the `GossipsubVersionLadder`.
49
+ *
50
+ * Protocols not on the ladder (floodsub, unknown protocols) support no features.
51
+ */
52
+ export declare function protocolSupportsFeature(protocol: string | undefined, feature: GossipsubFeature): boolean;
21
53
  /**
22
54
  * GossipsubD sets the optimal degree for a Gossipsub topic mesh. For example, if GossipsubD == 6,
23
55
  * each peer will want to have about six peers in their mesh for each topic they're subscribed to.
@@ -227,4 +259,5 @@ export declare const GossipsubMaxTopicBytesPerPeer: number;
227
259
  * string length so the per-peer budget bounds topic count as well as bytes.
228
260
  */
229
261
  export declare const GossipsubTopicEntryOverhead = 1024;
262
+ export {};
230
263
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,51 @@ export const GossipsubIDv11 = '/meshsub/1.1.0';
19
19
  * https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.2.md
20
20
  */
21
21
  export const GossipsubIDv12 = '/meshsub/1.2.0';
22
+ /**
23
+ * An ordered ladder of gossipsub protocol IDs, oldest to newest. Each version is a
24
+ * superset of the one before it, so a protocol's position on the ladder determines
25
+ * which features it supports - see `protocolSupportsFeature`.
26
+ *
27
+ * New protocol versions must be appended to the end of this list.
28
+ */
29
+ const versionLadder = [GossipsubIDv10, GossipsubIDv11, GossipsubIDv12];
30
+ export const GossipsubVersionLadder = versionLadder;
31
+ /**
32
+ * Gossipsub protocol features that are only available from a minimum protocol version
33
+ * onward. Used with `protocolSupportsFeature` to gate version-dependent behavior on the
34
+ * protocol negotiated with a peer, instead of comparing protocol IDs for equality.
35
+ */
36
+ export var GossipsubFeature;
37
+ (function (GossipsubFeature) {
38
+ /**
39
+ * PRUNE messages carry backoff and peer exchange info (gossipsub v1.1+)
40
+ */
41
+ GossipsubFeature["Backoff"] = "Backoff";
42
+ /**
43
+ * IDONTWANT control messages (gossipsub v1.2+)
44
+ */
45
+ GossipsubFeature["IDontWant"] = "IDontWant";
46
+ })(GossipsubFeature || (GossipsubFeature = {}));
47
+ const featureMinimumProtocol = {
48
+ [GossipsubFeature.Backoff]: GossipsubIDv11,
49
+ [GossipsubFeature.IDontWant]: GossipsubIDv12
50
+ };
51
+ /**
52
+ * Returns true when `protocol` is a gossipsub version that supports `feature` - that is,
53
+ * when it sits at or above the feature's minimum version on the `GossipsubVersionLadder`.
54
+ *
55
+ * Protocols not on the ladder (floodsub, unknown protocols) support no features.
56
+ */
57
+ export function protocolSupportsFeature(protocol, feature) {
58
+ if (protocol == null) {
59
+ return false;
60
+ }
61
+ const protocolIndex = GossipsubVersionLadder.indexOf(protocol);
62
+ if (protocolIndex === -1) {
63
+ return false;
64
+ }
65
+ return protocolIndex >= GossipsubVersionLadder.indexOf(featureMinimumProtocol[feature]);
66
+ }
22
67
  // Overlay parameters
23
68
  /**
24
69
  * GossipsubD sets the optimal degree for a Gossipsub topic mesh. For example, if GossipsubD == 6,
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"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"}
@@ -127,7 +127,9 @@ export declare class GossipSub extends TypedEventEmitter<GossipSubEvents> implem
127
127
  */
128
128
  private readonly idontwantCounts;
129
129
  /**
130
- * Tracks IDONTWANT messages received by peers and the heartbeat they were received in
130
+ * Tracks IDONTWANT messages received by peers and the heartbeat they were received in.
131
+ * Message sends in the forward (per the v1.2 spec) and IWANT response paths are
132
+ * skipped for peers with an entry here.
131
133
  *
132
134
  * idontwants are stored for `mcacheLength` heartbeats before being pruned,
133
135
  * so this map is bounded by peerCount * idontwantMaxMessages * mcacheLength
@@ -1 +1 @@
1
- {"version":3,"file":"gossipsub.d.ts","sourceRoot":"","sources":["../../src/gossipsub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gossipsub.d.ts","sourceRoot":"","sources":["../../src/gossipsub.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ import { StrictNoSign, StrictSign, TopicValidatorResult } from "./index.js";
10
10
  import { defaultDecodeRpcLimits } from "./message/decodeRpc.js";
11
11
  import { RPC } from "./message/rpc.js";
12
12
  import { MessageCache } from "./message-cache.js";
13
- import { ChurnReason, getMetrics, IHaveIgnoreReason, InclusionReason, ScorePenalty } from "./metrics.js";
13
+ import { ChurnReason, getMetrics, IDontWantSkipPath, IHaveIgnoreReason, InclusionReason, ScorePenalty } from "./metrics.js";
14
14
  import { PeerScore, createPeerScoreParams, createPeerScoreThresholds } from "./score/index.js";
15
15
  import { computeAllPeersScoreWeights } from "./score/scoreMetrics.js";
16
16
  import { InboundStream, OutboundStream } from "./stream.js";
@@ -34,7 +34,7 @@ export class GossipSub extends TypedEventEmitter {
34
34
  * The signature policy to follow by default
35
35
  */
36
36
  globalSignaturePolicy;
37
- protocols = [constants.GossipsubIDv12, constants.GossipsubIDv11, constants.GossipsubIDv10];
37
+ protocols = [...constants.GossipsubVersionLadder].reverse();
38
38
  publishConfig;
39
39
  dataTransform;
40
40
  // State
@@ -145,7 +145,9 @@ export class GossipSub extends TypedEventEmitter {
145
145
  */
146
146
  idontwantCounts = new Map();
147
147
  /**
148
- * Tracks IDONTWANT messages received by peers and the heartbeat they were received in
148
+ * Tracks IDONTWANT messages received by peers and the heartbeat they were received in.
149
+ * Message sends in the forward (per the v1.2 spec) and IWANT response paths are
150
+ * skipped for peers with an entry here.
149
151
  *
150
152
  * idontwants are stored for `mcacheLength` heartbeats before being pruned,
151
153
  * so this map is bounded by peerCount * idontwantMaxMessages * mcacheLength
@@ -1184,6 +1186,10 @@ export class GossipSub extends TypedEventEmitter {
1184
1186
  iwantDonthave++;
1185
1187
  continue;
1186
1188
  }
1189
+ if (this.idontwants.get(id)?.has(msgIdStr) === true) {
1190
+ this.metrics?.onIdontwantSkippedSend(IDontWantSkipPath.iwant);
1191
+ continue;
1192
+ }
1187
1193
  iwantByTopic.set(entry.msg.topic, 1 + (iwantByTopic.get(entry.msg.topic) ?? 0));
1188
1194
  if (entry.count > constants.GossipsubGossipRetransmission) {
1189
1195
  this.log('IWANT: Peer %s has asked for message %s too many times: ignoring request', id, msgId);
@@ -1612,7 +1618,7 @@ export class GossipSub extends TypedEventEmitter {
1612
1618
  }
1613
1619
  return tosend;
1614
1620
  }
1615
- selectPeersToPublish(topic) {
1621
+ selectPeersToPublish(topic, floodPublish) {
1616
1622
  const tosend = new Set();
1617
1623
  const tosendCount = {
1618
1624
  direct: 0,
@@ -1624,7 +1630,8 @@ export class GossipSub extends TypedEventEmitter {
1624
1630
  if (peersInTopic != null) {
1625
1631
  // flood-publish behavior
1626
1632
  // send to direct peers and _all_ peers meeting the publishThreshold
1627
- if (this.opts.floodPublish) {
1633
+ // per-publish opt takes precedence over the global opt, while preserving a false value
1634
+ if (floodPublish ?? this.opts.floodPublish) {
1628
1635
  peersInTopic.forEach((id) => {
1629
1636
  if (this.direct.has(id)) {
1630
1637
  tosend.add(id);
@@ -1720,6 +1727,12 @@ export class GossipSub extends TypedEventEmitter {
1720
1727
  // Note: Don't throw if tosend is empty, we can have a mesh with a single peer
1721
1728
  // forward the message to peers
1722
1729
  tosend.forEach((id) => {
1730
+ // skip peers that told us they already have the message
1731
+ if (this.idontwants.get(id)?.has(msgIdStr) === true) {
1732
+ tosend.delete(id);
1733
+ this.metrics?.onIdontwantSkippedSend(IDontWantSkipPath.forward);
1734
+ return;
1735
+ }
1723
1736
  // sendRpc may mutate RPC message on piggyback, create a new message for each peer
1724
1737
  this.sendRpc(id, createGossipRpc([rawMsg]));
1725
1738
  });
@@ -1753,7 +1766,7 @@ export class GossipSub extends TypedEventEmitter {
1753
1766
  }
1754
1767
  throw Error('PublishError.Duplicate');
1755
1768
  }
1756
- const { tosend, tosendCount } = this.selectPeersToPublish(topic);
1769
+ const { tosend, tosendCount } = this.selectPeersToPublish(topic, opts?.floodPublish);
1757
1770
  const willSendToSelf = this.opts.emitSelf && this.subscriptions.has(topic);
1758
1771
  // Current publish opt takes precedence global opts, while preserving false value
1759
1772
  const allowPublishToZeroTopicPeers = opts?.allowPublishToZeroTopicPeers ?? this.opts.allowPublishToZeroTopicPeers;
@@ -1942,11 +1955,11 @@ export class GossipSub extends TypedEventEmitter {
1942
1955
  }
1943
1956
  // don't send IDONTWANT to:
1944
1957
  // - the source
1945
- // - peers that don't support v1.2
1958
+ // - peers whose negotiated protocol doesn't support IDONTWANT
1946
1959
  const tosend = new Set(ids);
1947
1960
  tosend.delete(source);
1948
1961
  for (const id of tosend) {
1949
- if (this.streamsOutbound.get(id)?.protocol !== constants.GossipsubIDv12) {
1962
+ if (!constants.protocolSupportsFeature(this.streamsOutbound.get(id)?.protocol, constants.GossipsubFeature.IDontWant)) {
1950
1963
  tosend.delete(id);
1951
1964
  }
1952
1965
  }
@@ -2140,7 +2153,7 @@ export class GossipSub extends TypedEventEmitter {
2140
2153
  */
2141
2154
  async makePrune(id, topic, doPX, onUnsubscribe) {
2142
2155
  this.score.prune(id, topic);
2143
- if (this.streamsOutbound.get(id)?.protocol === constants.GossipsubIDv10) {
2156
+ if (!constants.protocolSupportsFeature(this.streamsOutbound.get(id)?.protocol, constants.GossipsubFeature.Backoff)) {
2144
2157
  // Gossipsub v1.0 -- no backoff, the peer won't be able to parse it anyway
2145
2158
  return {
2146
2159
  topicID: topic,