Skip to content

Commit 871d0d2

Browse files
wraithgarvmx
authored andcommitted
feat: add bitswap.ledgerForPeer
1 parent e602810 commit 871d0d2

File tree

4 files changed

+47
-0
lines changed

4 files changed

+47
-0
lines changed

src/decision-engine/index.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,22 @@ class DecisionEngine {
135135
return this.ledgerMap.get(peerIdStr).wantlist.sortedEntries()
136136
}
137137

138+
ledgerForPeer (peerId) {
139+
const peerIdStr = peerId.toB58String()
140+
141+
const ledger = this.ledgerMap.get(peerIdStr)
142+
if (!ledger) {
143+
return null
144+
}
145+
return {
146+
peer: ledger.partner.toB58String(),
147+
value: ledger.debtRatio(),
148+
sent: ledger.accounting.bytesSent,
149+
recv: ledger.accounting.bytesRecv,
150+
exchanged: ledger.exchangeCount
151+
}
152+
}
153+
138154
peers () {
139155
return Array.from(this.ledgerMap.values()).map((l) => l.partner)
140156
}

src/index.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,16 @@ class Bitswap {
179179
return this.engine.wantlistForPeer(peerId)
180180
}
181181

182+
/**
183+
* Return ledger information for a given `peerId`
184+
*
185+
* @param {PeerId} peerId
186+
* @returns {?Object}
187+
*/
188+
ledgerForPeer (peerId) {
189+
return this.engine.ledgerForPeer(peerId)
190+
}
191+
182192
/**
183193
* Fetch a given block by cid. If the block is in the local
184194
* blockstore it is returned, otherwise the block is added to the wantlist and returned once another node sends it to us.

test/bitswap-mock-internals.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,13 @@ describe('bitswap with mocks', function () {
7676

7777
expect(blocks[0].data).to.eql(b1.data)
7878
expect(blocks[1].data).to.eql(b2.data)
79+
80+
const ledger = bs.ledgerForPeer(other)
81+
expect(ledger.peer).to.equal(other.toB58String())
82+
expect(ledger.value).to.equal(0)
83+
expect(ledger.sent).to.equal(0)
84+
expect(ledger.recv).to.equal(96)
85+
expect(ledger.exchanged).to.equal(2)
7986
done()
8087
})
8188
})
@@ -381,4 +388,16 @@ describe('bitswap with mocks', function () {
381388
})
382389
})
383390
})
391+
392+
describe('ledgerForPeer', () => {
393+
it('returns null for unknown peer', (done) => {
394+
const bs = new Bitswap(mockLibp2pNode(), repo.blocks)
395+
PeerId.create((err, id) => {
396+
expect(err).to.not.exist()
397+
const ledger = bs.ledgerForPeer(id)
398+
expect(ledger).to.equal(null)
399+
done()
400+
})
401+
})
402+
})
384403
})

test/decision-engine/ledger.spec.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ describe('Ledger', () => {
2828
})
2929

3030
it('accounts', () => {
31+
expect(ledger.debtRatio()).to.eql(0)
32+
3133
ledger.sentBytes(100)
3234
ledger.sentBytes(12000)
3335
ledger.receivedBytes(223432)

0 commit comments

Comments
 (0)