Skip to content

Commit 98308f7

Browse files
authored
fix: support reading identity cids (#429)
Use a tiered blockstore that combines an identity blockstore with the configured blockstore to support reading identity CIDs.
1 parent 3283a5c commit 98308f7

File tree

12 files changed

+28
-12
lines changed

12 files changed

+28
-12
lines changed

packages/car/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@
154154
"@helia/unixfs": "^3.0.0",
155155
"@ipld/dag-pb": "^4.0.8",
156156
"aegir": "^42.2.2",
157-
"blockstore-core": "^4.3.10",
157+
"blockstore-core": "^4.4.0",
158158
"ipfs-unixfs-importer": "^15.2.4",
159159
"it-to-buffer": "^4.0.5"
160160
}

packages/dag-cbor/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,6 @@
149149
},
150150
"devDependencies": {
151151
"aegir": "^42.2.2",
152-
"blockstore-core": "^4.3.10"
152+
"blockstore-core": "^4.4.0"
153153
}
154154
}

packages/dag-json/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,6 @@
148148
},
149149
"devDependencies": {
150150
"aegir": "^42.2.2",
151-
"blockstore-core": "^4.3.10"
151+
"blockstore-core": "^4.4.0"
152152
}
153153
}

packages/helia/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
"@libp2p/webrtc": "^4.0.17",
7979
"@libp2p/websockets": "^8.0.13",
8080
"@libp2p/webtransport": "^4.0.17",
81-
"blockstore-core": "^4.3.10",
81+
"blockstore-core": "^4.4.0",
8282
"datastore-core": "^9.2.7",
8383
"interface-blockstore": "^5.2.9",
8484
"interface-datastore": "^8.2.10",

packages/http/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
"@helia/interface": "^4.0.0",
5858
"@helia/routers": "^1.0.0",
5959
"@helia/utils": "^0.0.1",
60-
"blockstore-core": "^4.3.10",
60+
"blockstore-core": "^4.4.0",
6161
"datastore-core": "^9.2.7"
6262
},
6363
"devDependencies": {

packages/json/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,6 @@
147147
},
148148
"devDependencies": {
149149
"aegir": "^42.2.2",
150-
"blockstore-core": "^4.3.10"
150+
"blockstore-core": "^4.4.0"
151151
}
152152
}

packages/mfs/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@
152152
"devDependencies": {
153153
"@ipld/dag-pb": "^4.0.8",
154154
"aegir": "^42.2.2",
155-
"blockstore-core": "^4.3.10",
155+
"blockstore-core": "^4.4.0",
156156
"datastore-core": "^9.2.7",
157157
"delay": "^6.0.0",
158158
"it-all": "^3.0.4",

packages/strings/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,6 @@
150150
},
151151
"devDependencies": {
152152
"aegir": "^42.2.2",
153-
"blockstore-core": "^4.3.10"
153+
"blockstore-core": "^4.4.0"
154154
}
155155
}

packages/unixfs/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@
180180
},
181181
"devDependencies": {
182182
"aegir": "^42.2.2",
183-
"blockstore-core": "^4.3.10",
183+
"blockstore-core": "^4.4.0",
184184
"delay": "^6.0.0",
185185
"iso-url": "^1.2.1",
186186
"it-all": "^3.0.4",

packages/utils/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
"@libp2p/peer-collections": "^5.1.5",
6363
"@libp2p/utils": "^5.2.3",
6464
"any-signal": "^4.1.1",
65+
"blockstore-core": "^4.4.0",
6566
"cborg": "^4.0.8",
6667
"interface-blockstore": "^5.2.9",
6768
"interface-datastore": "^8.2.10",
@@ -78,7 +79,6 @@
7879
"devDependencies": {
7980
"@types/sinon": "^17.0.3",
8081
"aegir": "^42.2.2",
81-
"blockstore-core": "^4.3.10",
8282
"datastore-core": "^9.2.7",
8383
"delay": "^6.0.0",
8484
"it-all": "^3.0.4",

packages/utils/src/utils/networked-storage.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { CodeError, start, stop } from '@libp2p/interface'
22
import { anySignal } from 'any-signal'
3+
import { IdentityBlockstore } from 'blockstore-core/identity'
4+
import { TieredBlockstore } from 'blockstore-core/tiered'
35
import filter from 'it-filter'
46
import forEach from 'it-foreach'
57
import { CustomProgressEvent, type ProgressOptions } from 'progress-events'
@@ -47,7 +49,10 @@ export class NetworkedStorage implements Blocks, Startable {
4749
*/
4850
constructor (components: NetworkedStorageComponents) {
4951
this.log = components.logger.forComponent('helia:networked-storage')
50-
this.child = components.blockstore
52+
this.child = new TieredBlockstore([
53+
new IdentityBlockstore(),
54+
components.blockstore
55+
])
5156
this.blockRetrievers = (components.blockBrokers ?? []).filter(isBlockRetriever)
5257
this.blockAnnouncers = (components.blockBrokers ?? []).filter(isBlockAnnouncer)
5358
this.hashers = components.hashers ?? {}

packages/utils/test/utils/networked-storage.spec.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,18 @@ import { MemoryBlockstore } from 'blockstore-core'
66
import delay from 'delay'
77
import all from 'it-all'
88
import drain from 'it-drain'
9+
import { CID } from 'multiformats/cid'
910
import * as raw from 'multiformats/codecs/raw'
11+
import { identity } from 'multiformats/hashes/identity'
1012
import Sinon from 'sinon'
1113
import { type StubbedInstance, stubInterface } from 'sinon-ts'
14+
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
15+
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
1216
import { defaultHashers } from '../../src/utils/default-hashers.js'
1317
import { NetworkedStorage } from '../../src/utils/networked-storage.js'
1418
import { createBlock } from '../fixtures/create-block.js'
1519
import type { BlockAnnouncer, BlockRetriever } from '@helia/interface/blocks'
1620
import type { Blockstore } from 'interface-blockstore'
17-
import type { CID } from 'multiformats/cid'
1821

1922
describe('networked-storage', () => {
2023
let storage: NetworkedStorage
@@ -185,4 +188,12 @@ describe('networked-storage', () => {
185188
expect(await blockstore.has(blocks[i].cid)).to.be.true()
186189
}
187190
})
191+
192+
it('supports identity CIDs', async () => {
193+
const data = uint8ArrayFromString('hello world')
194+
const cid = CID.createV1(identity.code, identity.digest(data))
195+
196+
const block = await storage.get(cid)
197+
expect(uint8ArrayToString(block)).to.equal('hello world')
198+
})
188199
})

0 commit comments

Comments
 (0)