@libp2p/gossipsub 17.0.1 → 17.1.0
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.
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +3 -3
- package/dist/src/constants.d.ts +33 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +45 -0
- package/dist/src/constants.js.map +1 -1
- package/dist/src/gossipsub.d.ts +3 -1
- package/dist/src/gossipsub.d.ts.map +1 -1
- package/dist/src/gossipsub.js +22 -9
- package/dist/src/gossipsub.js.map +1 -1
- package/dist/src/metrics.d.ts +9 -0
- package/dist/src/metrics.d.ts.map +1 -1
- package/dist/src/metrics.js +14 -0
- package/dist/src/metrics.js.map +1 -1
- package/dist/src/types.d.ts +6 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/typedoc-urls.json +2 -0
- package/package.json +1 -1
- package/src/constants.ts +54 -0
- package/src/gossipsub.ts +25 -8
- package/src/metrics.ts +15 -0
- package/src/types.ts +6 -0
package/dist/src/constants.d.ts
CHANGED
|
@@ -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":"AAAA,eAAO,MAAM,MAAM,OAAO,CAAA;AAC1B,eAAO,MAAM,MAAM,QAAc,CAAA;AAIjC,eAAO,MAAM,UAAU,oBAAoB,CAAA;AAE3C;;;GAGG;AACH,eAAO,MAAM,cAAc,mBAAmB,CAAA;AAE9C;;;;GAIG;AACH,eAAO,MAAM,cAAc,mBAAmB,CAAA;AAE9C;;;;GAIG;AACH,eAAO,MAAM,cAAc,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/src/constants.js
CHANGED
|
@@ -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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"}
|
package/dist/src/gossipsub.d.ts
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAa/F,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE3E,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"gossipsub.d.ts","sourceRoot":"","sources":["../../src/gossipsub.ts"],"names":[],"mappings":"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"}
|
package/dist/src/gossipsub.js
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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,
|