@helia/bitswap 3.1.2-b3783c0d → 3.1.2-eaeb734d
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 +1 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +1 -0
- package/dist/src/constants.js.map +1 -1
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/peer-want-lists/index.d.ts +2 -0
- package/dist/src/peer-want-lists/index.d.ts.map +1 -1
- package/dist/src/peer-want-lists/index.js +8 -53
- package/dist/src/peer-want-lists/index.js.map +1 -1
- package/dist/src/peer-want-lists/ledger.d.ts +23 -2
- package/dist/src/peer-want-lists/ledger.d.ts.map +1 -1
- package/dist/src/peer-want-lists/ledger.js +113 -1
- package/dist/src/peer-want-lists/ledger.js.map +1 -1
- package/package.json +3 -3
- package/src/constants.ts +1 -0
- package/src/index.ts +7 -0
- package/src/peer-want-lists/index.ts +9 -59
- package/src/peer-want-lists/ledger.ts +154 -3
package/dist/src/constants.d.ts
CHANGED
|
@@ -12,4 +12,5 @@ export declare const DEFAULT_MAX_PROVIDERS_PER_REQUEST = 3;
|
|
|
12
12
|
export declare const DEFAULT_MAX_OUTGOING_MESSAGE_SIZE: number;
|
|
13
13
|
export declare const DEFAULT_MAX_INCOMING_MESSAGE_SIZE: number;
|
|
14
14
|
export declare const DEFAULT_DO_NOT_RESEND_BLOCK_WINDOW: number;
|
|
15
|
+
export declare const DEFAULT_MAX_WANTLIST_SIZE = 1024;
|
|
15
16
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,wBAAwB,CAAA;AAChD,eAAO,MAAM,uCAAuC,OAAO,CAAA;AAC3D,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAC/C,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAChD,eAAO,MAAM,+BAA+B,OAAO,CAAA;AACnD,eAAO,MAAM,0BAA0B,KAAK,CAAA;AAC5C,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAChD,eAAO,MAAM,gCAAgC,KAAK,CAAA;AAClD,eAAO,MAAM,oCAAoC,QAAQ,CAAA;AACzD,eAAO,MAAM,6BAA6B,IAAI,CAAA;AAC9C,eAAO,MAAM,iCAAiC,IAAI,CAAA;AAClD,eAAO,MAAM,iCAAiC,QAAkB,CAAA;AAChE,eAAO,MAAM,iCAAiC,QAAoC,CAAA;AAClF,eAAO,MAAM,kCAAkC,QAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,wBAAwB,CAAA;AAChD,eAAO,MAAM,uCAAuC,OAAO,CAAA;AAC3D,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAC/C,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAChD,eAAO,MAAM,+BAA+B,OAAO,CAAA;AACnD,eAAO,MAAM,0BAA0B,KAAK,CAAA;AAC5C,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAChD,eAAO,MAAM,gCAAgC,KAAK,CAAA;AAClD,eAAO,MAAM,oCAAoC,QAAQ,CAAA;AACzD,eAAO,MAAM,6BAA6B,IAAI,CAAA;AAC9C,eAAO,MAAM,iCAAiC,IAAI,CAAA;AAClD,eAAO,MAAM,iCAAiC,QAAkB,CAAA;AAChE,eAAO,MAAM,iCAAiC,QAAoC,CAAA;AAClF,eAAO,MAAM,kCAAkC,QAAY,CAAA;AAC3D,eAAO,MAAM,yBAAyB,OAAO,CAAA"}
|
package/dist/src/constants.js
CHANGED
|
@@ -12,4 +12,5 @@ export const DEFAULT_MAX_PROVIDERS_PER_REQUEST = 3;
|
|
|
12
12
|
export const DEFAULT_MAX_OUTGOING_MESSAGE_SIZE = 1024 * 1024 * 4;
|
|
13
13
|
export const DEFAULT_MAX_INCOMING_MESSAGE_SIZE = DEFAULT_MAX_OUTGOING_MESSAGE_SIZE;
|
|
14
14
|
export const DEFAULT_DO_NOT_RESEND_BLOCK_WINDOW = 1_000 * 5;
|
|
15
|
+
export const DEFAULT_MAX_WANTLIST_SIZE = 1024;
|
|
15
16
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAA;AAChD,MAAM,CAAC,MAAM,uCAAuC,GAAG,IAAI,CAAA;AAC3D,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAA;AAC/C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAA;AAChD,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAA;AACnD,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAA;AAC5C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAA;AAChD,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAA;AAClD,MAAM,CAAC,MAAM,oCAAoC,GAAG,KAAK,CAAA;AACzD,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAA;AAC9C,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAA;AAClD,MAAM,CAAC,MAAM,iCAAiC,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAA;AAChE,MAAM,CAAC,MAAM,iCAAiC,GAAG,iCAAiC,CAAA;AAClF,MAAM,CAAC,MAAM,kCAAkC,GAAG,KAAK,GAAG,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAA;AAChD,MAAM,CAAC,MAAM,uCAAuC,GAAG,IAAI,CAAA;AAC3D,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAA;AAC/C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAA;AAChD,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAA;AACnD,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAA;AAC5C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAA;AAChD,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAA;AAClD,MAAM,CAAC,MAAM,oCAAoC,GAAG,KAAK,CAAA;AACzD,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAA;AAC9C,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAA;AAClD,MAAM,CAAC,MAAM,iCAAiC,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAA;AAChE,MAAM,CAAC,MAAM,iCAAiC,GAAG,iCAAiC,CAAA;AAClF,MAAM,CAAC,MAAM,kCAAkC,GAAG,KAAK,GAAG,CAAC,CAAA;AAC3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAA"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -169,6 +169,12 @@ export interface BitswapOptions {
|
|
|
169
169
|
* @default 5000
|
|
170
170
|
*/
|
|
171
171
|
doNotResendBlockWindow?: number;
|
|
172
|
+
/**
|
|
173
|
+
* Restrict the local copy of each peer wantlist to this many entries
|
|
174
|
+
*
|
|
175
|
+
* @default 1024
|
|
176
|
+
*/
|
|
177
|
+
maxWantlistSize?: number;
|
|
172
178
|
}
|
|
173
179
|
export declare const createBitswap: (components: BitswapComponents, options?: BitswapOptions) => Bitswap;
|
|
174
180
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,cAAc,CAAA;AA6MtD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,UAA6B,EAAE,UAA0B,EAAE,EAAW,EAAE;IACpG,OAAO,IAAI,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AAC9C,CAAC,CAAA"}
|
|
@@ -10,6 +10,7 @@ import type { ProgressOptions } from 'progress-events';
|
|
|
10
10
|
export interface PeerWantListsInit {
|
|
11
11
|
maxSizeReplaceHasWithBlock?: number;
|
|
12
12
|
doNotResendBlockWindow?: number;
|
|
13
|
+
maxWantListSize?: number;
|
|
13
14
|
}
|
|
14
15
|
export interface PeerWantListsComponents {
|
|
15
16
|
blockstore: Blockstore;
|
|
@@ -31,6 +32,7 @@ export declare class PeerWantLists {
|
|
|
31
32
|
readonly ledgerMap: PeerMap<Ledger>;
|
|
32
33
|
private readonly maxSizeReplaceHasWithBlock?;
|
|
33
34
|
private readonly doNotResendBlockWindow?;
|
|
35
|
+
private readonly maxWantListSize?;
|
|
34
36
|
private readonly log;
|
|
35
37
|
private readonly logger;
|
|
36
38
|
constructor(components: PeerWantListsComponents, init?: PeerWantListsInit);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/peer-want-lists/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/peer-want-lists/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACjF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAU,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACvG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,iBAAiB;IAChC,0BAA0B,CAAC,EAAE,MAAM,CAAA;IACnC,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,aAAa;IACjB,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IACvB,SAAgB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1C,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAQ;IACpD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAQ;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAE3B,UAAU,EAAE,uBAAuB,EAAE,IAAI,GAAE,iBAAsB;IAyB9E,aAAa,CAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAgBtD,eAAe,CAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,GAAG,SAAS;IAajE,KAAK,IAAK,MAAM,EAAE;IAIlB;;OAEG;IACG,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BvE,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,CAAC,2BAA2B,CAAC,GAAG,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnH,gBAAgB,CAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAGxC"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
/* eslint-disable max-depth */
|
|
2
1
|
import { trackedPeerMap } from '@libp2p/peer-collections';
|
|
3
2
|
import { CID } from 'multiformats/cid';
|
|
4
|
-
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
5
|
-
import { WantType } from '../pb/message.js';
|
|
6
3
|
import { Ledger } from './ledger.js';
|
|
7
4
|
export class PeerWantLists {
|
|
8
5
|
blockstore;
|
|
@@ -10,6 +7,7 @@ export class PeerWantLists {
|
|
|
10
7
|
ledgerMap;
|
|
11
8
|
maxSizeReplaceHasWithBlock;
|
|
12
9
|
doNotResendBlockWindow;
|
|
10
|
+
maxWantListSize;
|
|
13
11
|
log;
|
|
14
12
|
logger;
|
|
15
13
|
constructor(components, init = {}) {
|
|
@@ -17,6 +15,7 @@ export class PeerWantLists {
|
|
|
17
15
|
this.network = components.network;
|
|
18
16
|
this.maxSizeReplaceHasWithBlock = init.maxSizeReplaceHasWithBlock;
|
|
19
17
|
this.doNotResendBlockWindow = init.doNotResendBlockWindow;
|
|
18
|
+
this.maxWantListSize = init.maxWantListSize;
|
|
20
19
|
this.log = components.logger.forComponent('helia:bitswap:peer-want-lists');
|
|
21
20
|
this.logger = components.logger;
|
|
22
21
|
this.ledgerMap = trackedPeerMap({
|
|
@@ -53,7 +52,7 @@ export class PeerWantLists {
|
|
|
53
52
|
}
|
|
54
53
|
// remove any expired wants
|
|
55
54
|
ledger.removeExpiredWants();
|
|
56
|
-
return
|
|
55
|
+
return ledger.getWants();
|
|
57
56
|
}
|
|
58
57
|
peers() {
|
|
59
58
|
return Array.from(this.ledgerMap.values()).map((l) => l.peerId);
|
|
@@ -71,7 +70,8 @@ export class PeerWantLists {
|
|
|
71
70
|
logger: this.logger
|
|
72
71
|
}, {
|
|
73
72
|
maxSizeReplaceHasWithBlock: this.maxSizeReplaceHasWithBlock,
|
|
74
|
-
doNotResendBlockWindow: this.doNotResendBlockWindow
|
|
73
|
+
doNotResendBlockWindow: this.doNotResendBlockWindow,
|
|
74
|
+
maxWantListSize: this.maxWantListSize
|
|
75
75
|
});
|
|
76
76
|
this.ledgerMap.set(peerId, ledger);
|
|
77
77
|
}
|
|
@@ -79,60 +79,15 @@ export class PeerWantLists {
|
|
|
79
79
|
ledger.receivedBytes(message.blocks?.reduce((acc, curr) => acc + curr.data.byteLength, 0) ?? 0);
|
|
80
80
|
// remove any expired wants
|
|
81
81
|
ledger.removeExpiredWants();
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (message.wantlist.full === true) {
|
|
85
|
-
ledger.wants.clear();
|
|
86
|
-
}
|
|
87
|
-
// clear cancelled wants and add new wants to the ledger
|
|
88
|
-
for (const entry of message.wantlist.entries) {
|
|
89
|
-
const cid = CID.decode(entry.cid);
|
|
90
|
-
const cidStr = uint8ArrayToString(cid.multihash.bytes, 'base64');
|
|
91
|
-
if (entry.cancel === true) {
|
|
92
|
-
this.log('peer %p cancelled want of block for %c', peerId, cid);
|
|
93
|
-
ledger.wants.delete(cidStr);
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
if (entry.wantType === WantType.WantHave) {
|
|
97
|
-
this.log('peer %p wanted block presence for %c', peerId, cid);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
this.log('peer %p wanted block for %c', peerId, cid);
|
|
101
|
-
}
|
|
102
|
-
const existingWant = ledger.wants.get(cidStr);
|
|
103
|
-
// we are already tracking a want for this CID, just update the fields
|
|
104
|
-
if (existingWant != null) {
|
|
105
|
-
const sentOrSending = existingWant.status === 'sent' || existingWant.status === 'sending';
|
|
106
|
-
const wantTypeUpgrade = existingWant.wantType === WantType.WantHave && (entry.wantType == null || entry.wantType === WantType.WantBlock);
|
|
107
|
-
// allow upgrade from WantHave to WantBlock if we've previously
|
|
108
|
-
// sent or are sending a WantHave
|
|
109
|
-
if (sentOrSending && wantTypeUpgrade) {
|
|
110
|
-
existingWant.status = 'want';
|
|
111
|
-
}
|
|
112
|
-
existingWant.priority = entry.priority;
|
|
113
|
-
existingWant.wantType = entry.wantType ?? WantType.WantBlock;
|
|
114
|
-
existingWant.sendDontHave = entry.sendDontHave ?? false;
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
// add a new want
|
|
118
|
-
ledger.wants.set(cidStr, {
|
|
119
|
-
cid,
|
|
120
|
-
priority: entry.priority,
|
|
121
|
-
wantType: entry.wantType ?? WantType.WantBlock,
|
|
122
|
-
sendDontHave: entry.sendDontHave ?? false,
|
|
123
|
-
status: 'want'
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
82
|
+
// add new wants
|
|
83
|
+
ledger.addWants(message.wantlist);
|
|
128
84
|
this.log('send blocks to peer');
|
|
129
85
|
await ledger.sendBlocksToPeer();
|
|
130
86
|
}
|
|
131
87
|
async receivedBlock(cid, options) {
|
|
132
|
-
const cidStr = uint8ArrayToString(cid.multihash.bytes, 'base64');
|
|
133
88
|
const ledgers = [];
|
|
134
89
|
for (const ledger of this.ledgerMap.values()) {
|
|
135
|
-
if (ledger.
|
|
90
|
+
if (ledger.hasWant(cid)) {
|
|
136
91
|
ledgers.push(ledger);
|
|
137
92
|
}
|
|
138
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/peer-want-lists/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/peer-want-lists/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { CID } from 'multiformats/cid';
|
|
1
2
|
import { WantType } from '../pb/message.js';
|
|
2
3
|
import type { Network } from '../network.js';
|
|
4
|
+
import type { Wantlist } from '../pb/message.js';
|
|
3
5
|
import type { AbortOptions, ComponentLogger, PeerId } from '@libp2p/interface';
|
|
4
6
|
import type { Blockstore } from 'interface-blockstore';
|
|
5
|
-
import type { CID } from 'multiformats/cid';
|
|
6
7
|
export interface LedgerComponents {
|
|
7
8
|
peerId: PeerId;
|
|
8
9
|
blockstore: Blockstore;
|
|
@@ -12,6 +13,7 @@ export interface LedgerComponents {
|
|
|
12
13
|
export interface LedgerInit {
|
|
13
14
|
maxSizeReplaceHasWithBlock?: number;
|
|
14
15
|
doNotResendBlockWindow?: number;
|
|
16
|
+
maxWantListSize?: number;
|
|
15
17
|
}
|
|
16
18
|
export interface PeerWantListEntry {
|
|
17
19
|
/**
|
|
@@ -46,12 +48,26 @@ export interface PeerWantListEntry {
|
|
|
46
48
|
* peer. Once it has expired the peer can request the block a subsequent time.
|
|
47
49
|
*/
|
|
48
50
|
expires?: number;
|
|
51
|
+
/**
|
|
52
|
+
* A timestamp of when this entry was created
|
|
53
|
+
*/
|
|
54
|
+
created: number;
|
|
55
|
+
/**
|
|
56
|
+
* If this field is false, we have attempted to send this WantList entry but
|
|
57
|
+
* found there is no block for the CID in the blockstore and we are
|
|
58
|
+
* optimistically waiting to see if we come across it later.
|
|
59
|
+
*
|
|
60
|
+
* We only perform the check when we are about to send the block, by which
|
|
61
|
+
* point the entry status is 'sending' so this value with either be false or
|
|
62
|
+
* not set
|
|
63
|
+
*/
|
|
64
|
+
haveBlock?: false;
|
|
49
65
|
}
|
|
50
66
|
export declare class Ledger {
|
|
51
67
|
peerId: PeerId;
|
|
52
68
|
private readonly blockstore;
|
|
53
69
|
private readonly network;
|
|
54
|
-
wants
|
|
70
|
+
private wants;
|
|
55
71
|
exchangeCount: number;
|
|
56
72
|
bytesSent: number;
|
|
57
73
|
bytesReceived: number;
|
|
@@ -59,11 +75,16 @@ export declare class Ledger {
|
|
|
59
75
|
private readonly maxSizeReplaceHasWithBlock;
|
|
60
76
|
private readonly log;
|
|
61
77
|
private readonly doNotResendBlockWindow;
|
|
78
|
+
private readonly maxWantListSize;
|
|
62
79
|
constructor(components: LedgerComponents, init: LedgerInit);
|
|
63
80
|
sentBytes(n: number): void;
|
|
64
81
|
receivedBytes(n: number): void;
|
|
65
82
|
debtRatio(): number;
|
|
66
83
|
removeExpiredWants(): void;
|
|
84
|
+
addWants(wantlist?: Wantlist): void;
|
|
85
|
+
private truncateWants;
|
|
86
|
+
getWants(): PeerWantListEntry[];
|
|
87
|
+
hasWant(cid: CID): boolean;
|
|
67
88
|
sendBlocksToPeer(options?: AbortOptions): Promise<void>;
|
|
68
89
|
}
|
|
69
90
|
//# sourceMappingURL=ledger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../../src/peer-want-lists/ledger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../../src/peer-want-lists/ledger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,EAAqB,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAG9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAU,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,0BAA0B,CAAC,EAAE,MAAM,CAAA;IACnC,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,GAAG,EAAE,GAAG,CAAA;IAER;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,QAAQ,EAAE,QAAQ,CAAA;IAElB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAA;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;IAEnC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,KAAK,CAAA;CAClB;AAED,qBAAa,MAAM;IACV,MAAM,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,KAAK,CAAgC;IACtC,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAQ;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;gBAE3B,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU;IAe3D,SAAS,CAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAM3B,aAAa,CAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAM/B,SAAS,IAAK,MAAM;IAIpB,kBAAkB,IAAK,IAAI;IASpB,QAAQ,CAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI;IAuE3C,OAAO,CAAC,aAAa;IA8Cd,QAAQ,IAAK,iBAAiB,EAAE;IAIhC,OAAO,CAAE,GAAG,EAAE,GAAG,GAAG,OAAO;IAMrB,gBAAgB,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAoGtE"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import toBuffer from 'it-to-buffer';
|
|
2
|
-
import {
|
|
2
|
+
import { CID } from 'multiformats/cid';
|
|
3
|
+
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
4
|
+
import { DEFAULT_MAX_SIZE_REPLACE_HAS_WITH_BLOCK, DEFAULT_DO_NOT_RESEND_BLOCK_WINDOW, DEFAULT_MAX_WANTLIST_SIZE } from '../constants.js';
|
|
3
5
|
import { BlockPresenceType, WantType } from '../pb/message.js';
|
|
4
6
|
import { QueuedBitswapMessage } from '../utils/bitswap-message.js';
|
|
5
7
|
import { cidToPrefix } from '../utils/cid-prefix.js';
|
|
@@ -15,6 +17,7 @@ export class Ledger {
|
|
|
15
17
|
maxSizeReplaceHasWithBlock;
|
|
16
18
|
log;
|
|
17
19
|
doNotResendBlockWindow;
|
|
20
|
+
maxWantListSize;
|
|
18
21
|
constructor(components, init) {
|
|
19
22
|
this.peerId = components.peerId;
|
|
20
23
|
this.blockstore = components.blockstore;
|
|
@@ -26,6 +29,7 @@ export class Ledger {
|
|
|
26
29
|
this.bytesReceived = 0;
|
|
27
30
|
this.maxSizeReplaceHasWithBlock = init.maxSizeReplaceHasWithBlock ?? DEFAULT_MAX_SIZE_REPLACE_HAS_WITH_BLOCK;
|
|
28
31
|
this.doNotResendBlockWindow = init.doNotResendBlockWindow ?? DEFAULT_DO_NOT_RESEND_BLOCK_WINDOW;
|
|
32
|
+
this.maxWantListSize = init.maxWantListSize ?? DEFAULT_MAX_WANTLIST_SIZE;
|
|
29
33
|
}
|
|
30
34
|
sentBytes(n) {
|
|
31
35
|
this.exchangeCount++;
|
|
@@ -48,6 +52,112 @@ export class Ledger {
|
|
|
48
52
|
}
|
|
49
53
|
});
|
|
50
54
|
}
|
|
55
|
+
addWants(wantlist) {
|
|
56
|
+
if (wantlist == null) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// if the message has a full wantlist, remove all entries not currently
|
|
60
|
+
// being sent to the peer
|
|
61
|
+
if (wantlist.full === true) {
|
|
62
|
+
this.wants.forEach((value, key) => {
|
|
63
|
+
if (value.status === 'want') {
|
|
64
|
+
this.wants.delete(key);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// clear cancelled wants and add new wants to the ledger
|
|
69
|
+
for (const entry of wantlist.entries) {
|
|
70
|
+
const cid = CID.decode(entry.cid);
|
|
71
|
+
const cidStr = uint8ArrayToString(cid.multihash.bytes, 'base64');
|
|
72
|
+
if (entry.cancel === true) {
|
|
73
|
+
this.log('peer %p cancelled want of block for %c', this.peerId, cid);
|
|
74
|
+
this.wants.delete(cidStr);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
if (entry.wantType === WantType.WantHave) {
|
|
78
|
+
this.log('peer %p wanted block presence for %c', this.peerId, cid);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
this.log('peer %p wanted block for %c', this.peerId, cid);
|
|
82
|
+
}
|
|
83
|
+
const existingWant = this.wants.get(cidStr);
|
|
84
|
+
// we are already tracking a want for this CID, just update the fields
|
|
85
|
+
if (existingWant != null) {
|
|
86
|
+
const sentOrSending = existingWant.status === 'sent' || existingWant.status === 'sending';
|
|
87
|
+
const wantTypeUpgrade = existingWant.wantType === WantType.WantHave && (entry.wantType == null || entry.wantType === WantType.WantBlock);
|
|
88
|
+
// allow upgrade from WantHave to WantBlock if we've previously
|
|
89
|
+
// sent or are sending a WantHave
|
|
90
|
+
if (sentOrSending && wantTypeUpgrade) {
|
|
91
|
+
existingWant.status = 'want';
|
|
92
|
+
}
|
|
93
|
+
existingWant.priority = entry.priority;
|
|
94
|
+
existingWant.wantType = entry.wantType ?? WantType.WantBlock;
|
|
95
|
+
existingWant.sendDontHave = entry.sendDontHave ?? false;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
// add a new want
|
|
99
|
+
this.wants.set(cidStr, {
|
|
100
|
+
cid,
|
|
101
|
+
priority: entry.priority,
|
|
102
|
+
wantType: entry.wantType ?? WantType.WantBlock,
|
|
103
|
+
sendDontHave: entry.sendDontHave ?? false,
|
|
104
|
+
status: 'want',
|
|
105
|
+
created: Date.now()
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// if we have exceeded maxWantListSize, truncate the list - first select
|
|
110
|
+
// wants that are not currently being sent to the user
|
|
111
|
+
const wants = [...this.wants.entries()]
|
|
112
|
+
.filter(([key, entry]) => entry.status === 'want');
|
|
113
|
+
if (wants.length > this.maxWantListSize) {
|
|
114
|
+
this.truncateWants(wants);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
truncateWants(wants) {
|
|
118
|
+
// sort wants by priority, lack of block presence, then age so the wants
|
|
119
|
+
// to be evicted are a older, low priority wants that we don't have the
|
|
120
|
+
// block for
|
|
121
|
+
wants = wants
|
|
122
|
+
.sort((a, b) => {
|
|
123
|
+
if (a[1].created < b[1].created) {
|
|
124
|
+
return -1;
|
|
125
|
+
}
|
|
126
|
+
if (b[1].created < a[1].created) {
|
|
127
|
+
return 1;
|
|
128
|
+
}
|
|
129
|
+
return 0;
|
|
130
|
+
})
|
|
131
|
+
.sort((a, b) => {
|
|
132
|
+
if (a[1].haveBlock === false) {
|
|
133
|
+
return -1;
|
|
134
|
+
}
|
|
135
|
+
if (b[1].haveBlock === false) {
|
|
136
|
+
return 1;
|
|
137
|
+
}
|
|
138
|
+
return 0;
|
|
139
|
+
})
|
|
140
|
+
.sort((a, b) => {
|
|
141
|
+
if (a[1].priority < b[1].priority) {
|
|
142
|
+
return -1;
|
|
143
|
+
}
|
|
144
|
+
if (b[1].priority < a[1].priority) {
|
|
145
|
+
return 1;
|
|
146
|
+
}
|
|
147
|
+
return 0;
|
|
148
|
+
});
|
|
149
|
+
const toRemove = wants.length - this.maxWantListSize;
|
|
150
|
+
for (let i = 0; i < toRemove; i++) {
|
|
151
|
+
this.wants.delete(wants[i][0]);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
getWants() {
|
|
155
|
+
return [...this.wants.values()];
|
|
156
|
+
}
|
|
157
|
+
hasWant(cid) {
|
|
158
|
+
const cidStr = uint8ArrayToString(cid.multihash.bytes, 'base64');
|
|
159
|
+
return this.wants.has(cidStr);
|
|
160
|
+
}
|
|
51
161
|
async sendBlocksToPeer(options) {
|
|
52
162
|
const message = new QueuedBitswapMessage();
|
|
53
163
|
const sentBlocks = new Set();
|
|
@@ -107,6 +217,8 @@ export class Ledger {
|
|
|
107
217
|
}
|
|
108
218
|
// reset status to try again later
|
|
109
219
|
entry.status = 'want';
|
|
220
|
+
// used to maybe delete this want later if the want list grows too large
|
|
221
|
+
entry.haveBlock = false;
|
|
110
222
|
this.log('do not have block for %c', entry.cid);
|
|
111
223
|
// we don't have the requested block and the remote is not interested
|
|
112
224
|
// in us telling them that
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../src/peer-want-lists/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,uCAAuC,EAAE,kCAAkC,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../src/peer-want-lists/ledger.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@helia/bitswap",
|
|
3
|
-
"version": "3.1.2-
|
|
3
|
+
"version": "3.1.2-eaeb734d",
|
|
4
4
|
"description": "JavaScript implementation of the Bitswap data exchange protocol used by Helia",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/ipfs/helia/tree/main/packages/bitswap#readme",
|
|
@@ -51,8 +51,8 @@
|
|
|
51
51
|
"docs": "aegir docs"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@helia/interface": "6.1.1-
|
|
55
|
-
"@helia/utils": "2.4.2-
|
|
54
|
+
"@helia/interface": "6.1.1-eaeb734d",
|
|
55
|
+
"@helia/utils": "2.4.2-eaeb734d",
|
|
56
56
|
"@libp2p/interface": "^3.1.0",
|
|
57
57
|
"@libp2p/logger": "^6.0.5",
|
|
58
58
|
"@libp2p/peer-collections": "^7.0.5",
|
package/src/constants.ts
CHANGED
|
@@ -12,3 +12,4 @@ export const DEFAULT_MAX_PROVIDERS_PER_REQUEST = 3
|
|
|
12
12
|
export const DEFAULT_MAX_OUTGOING_MESSAGE_SIZE = 1024 * 1024 * 4
|
|
13
13
|
export const DEFAULT_MAX_INCOMING_MESSAGE_SIZE = DEFAULT_MAX_OUTGOING_MESSAGE_SIZE
|
|
14
14
|
export const DEFAULT_DO_NOT_RESEND_BLOCK_WINDOW = 1_000 * 5
|
|
15
|
+
export const DEFAULT_MAX_WANTLIST_SIZE = 1024
|
package/src/index.ts
CHANGED
|
@@ -202,6 +202,13 @@ export interface BitswapOptions {
|
|
|
202
202
|
* @default 5000
|
|
203
203
|
*/
|
|
204
204
|
doNotResendBlockWindow?: number
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Restrict the local copy of each peer wantlist to this many entries
|
|
208
|
+
*
|
|
209
|
+
* @default 1024
|
|
210
|
+
*/
|
|
211
|
+
maxWantlistSize?: number
|
|
205
212
|
}
|
|
206
213
|
|
|
207
214
|
export const createBitswap = (components: BitswapComponents, options: BitswapOptions = {}): Bitswap => {
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
/* eslint-disable max-depth */
|
|
2
|
-
|
|
3
1
|
import { trackedPeerMap } from '@libp2p/peer-collections'
|
|
4
2
|
import { CID } from 'multiformats/cid'
|
|
5
|
-
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
|
|
6
|
-
import { WantType } from '../pb/message.js'
|
|
7
3
|
import { Ledger } from './ledger.js'
|
|
8
4
|
import type { BitswapNotifyProgressEvents, PeerWantListEntry } from '../index.js'
|
|
9
5
|
import type { Network } from '../network.js'
|
|
@@ -16,6 +12,7 @@ import type { ProgressOptions } from 'progress-events'
|
|
|
16
12
|
export interface PeerWantListsInit {
|
|
17
13
|
maxSizeReplaceHasWithBlock?: number
|
|
18
14
|
doNotResendBlockWindow?: number
|
|
15
|
+
maxWantListSize?: number
|
|
19
16
|
}
|
|
20
17
|
|
|
21
18
|
export interface PeerWantListsComponents {
|
|
@@ -40,6 +37,7 @@ export class PeerWantLists {
|
|
|
40
37
|
public readonly ledgerMap: PeerMap<Ledger>
|
|
41
38
|
private readonly maxSizeReplaceHasWithBlock?: number
|
|
42
39
|
private readonly doNotResendBlockWindow?: number
|
|
40
|
+
private readonly maxWantListSize?: number
|
|
43
41
|
private readonly log: Logger
|
|
44
42
|
private readonly logger: ComponentLogger
|
|
45
43
|
|
|
@@ -48,6 +46,7 @@ export class PeerWantLists {
|
|
|
48
46
|
this.network = components.network
|
|
49
47
|
this.maxSizeReplaceHasWithBlock = init.maxSizeReplaceHasWithBlock
|
|
50
48
|
this.doNotResendBlockWindow = init.doNotResendBlockWindow
|
|
49
|
+
this.maxWantListSize = init.maxWantListSize
|
|
51
50
|
this.log = components.logger.forComponent('helia:bitswap:peer-want-lists')
|
|
52
51
|
this.logger = components.logger
|
|
53
52
|
|
|
@@ -93,7 +92,7 @@ export class PeerWantLists {
|
|
|
93
92
|
// remove any expired wants
|
|
94
93
|
ledger.removeExpiredWants()
|
|
95
94
|
|
|
96
|
-
return
|
|
95
|
+
return ledger.getWants()
|
|
97
96
|
}
|
|
98
97
|
|
|
99
98
|
peers (): PeerId[] {
|
|
@@ -114,7 +113,8 @@ export class PeerWantLists {
|
|
|
114
113
|
logger: this.logger
|
|
115
114
|
}, {
|
|
116
115
|
maxSizeReplaceHasWithBlock: this.maxSizeReplaceHasWithBlock,
|
|
117
|
-
doNotResendBlockWindow: this.doNotResendBlockWindow
|
|
116
|
+
doNotResendBlockWindow: this.doNotResendBlockWindow,
|
|
117
|
+
maxWantListSize: this.maxWantListSize
|
|
118
118
|
})
|
|
119
119
|
this.ledgerMap.set(peerId, ledger)
|
|
120
120
|
}
|
|
@@ -125,68 +125,18 @@ export class PeerWantLists {
|
|
|
125
125
|
// remove any expired wants
|
|
126
126
|
ledger.removeExpiredWants()
|
|
127
127
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
if (message.wantlist.full === true) {
|
|
131
|
-
ledger.wants.clear()
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// clear cancelled wants and add new wants to the ledger
|
|
135
|
-
for (const entry of message.wantlist.entries) {
|
|
136
|
-
const cid = CID.decode(entry.cid)
|
|
137
|
-
const cidStr = uint8ArrayToString(cid.multihash.bytes, 'base64')
|
|
138
|
-
|
|
139
|
-
if (entry.cancel === true) {
|
|
140
|
-
this.log('peer %p cancelled want of block for %c', peerId, cid)
|
|
141
|
-
ledger.wants.delete(cidStr)
|
|
142
|
-
} else {
|
|
143
|
-
if (entry.wantType === WantType.WantHave) {
|
|
144
|
-
this.log('peer %p wanted block presence for %c', peerId, cid)
|
|
145
|
-
} else {
|
|
146
|
-
this.log('peer %p wanted block for %c', peerId, cid)
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
const existingWant = ledger.wants.get(cidStr)
|
|
150
|
-
|
|
151
|
-
// we are already tracking a want for this CID, just update the fields
|
|
152
|
-
if (existingWant != null) {
|
|
153
|
-
const sentOrSending = existingWant.status === 'sent' || existingWant.status === 'sending'
|
|
154
|
-
const wantTypeUpgrade = existingWant.wantType === WantType.WantHave && (entry.wantType == null || entry.wantType === WantType.WantBlock)
|
|
155
|
-
|
|
156
|
-
// allow upgrade from WantHave to WantBlock if we've previously
|
|
157
|
-
// sent or are sending a WantHave
|
|
158
|
-
if (sentOrSending && wantTypeUpgrade) {
|
|
159
|
-
existingWant.status = 'want'
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
existingWant.priority = entry.priority
|
|
163
|
-
existingWant.wantType = entry.wantType ?? WantType.WantBlock
|
|
164
|
-
existingWant.sendDontHave = entry.sendDontHave ?? false
|
|
165
|
-
continue
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// add a new want
|
|
169
|
-
ledger.wants.set(cidStr, {
|
|
170
|
-
cid,
|
|
171
|
-
priority: entry.priority,
|
|
172
|
-
wantType: entry.wantType ?? WantType.WantBlock,
|
|
173
|
-
sendDontHave: entry.sendDontHave ?? false,
|
|
174
|
-
status: 'want'
|
|
175
|
-
})
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
128
|
+
// add new wants
|
|
129
|
+
ledger.addWants(message.wantlist)
|
|
179
130
|
|
|
180
131
|
this.log('send blocks to peer')
|
|
181
132
|
await ledger.sendBlocksToPeer()
|
|
182
133
|
}
|
|
183
134
|
|
|
184
135
|
async receivedBlock (cid: CID, options: ProgressOptions<BitswapNotifyProgressEvents> & AbortOptions): Promise<void> {
|
|
185
|
-
const cidStr = uint8ArrayToString(cid.multihash.bytes, 'base64')
|
|
186
136
|
const ledgers: Ledger[] = []
|
|
187
137
|
|
|
188
138
|
for (const ledger of this.ledgerMap.values()) {
|
|
189
|
-
if (ledger.
|
|
139
|
+
if (ledger.hasWant(cid)) {
|
|
190
140
|
ledgers.push(ledger)
|
|
191
141
|
}
|
|
192
142
|
}
|