From 35b4e7079d27cb0ac500539b5a1a76dc3d39abd4 Mon Sep 17 00:00:00 2001 From: Chris Troutner Date: Tue, 10 Feb 2026 17:19:13 -0700 Subject: [PATCH] fix(helia-coord): Updating to v1.10.0 with DHT --- package-lock.json | 111 +++++++++++++++++--------------------- package.json | 10 ++-- src/adapters/ipfs/ipfs.js | 28 ++++++++-- 3 files changed, 80 insertions(+), 69 deletions(-) diff --git a/package-lock.json b/package-lock.json index e9cbe46..8d33d5a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,11 +12,14 @@ "@chainsafe/libp2p-gossipsub": "14.1.0", "@chainsafe/libp2p-noise": "16.0.1", "@chainsafe/libp2p-yamux": "7.0.1", + "@helia/block-brokers": "4.0.4", + "@helia/routers": "3.0.0", "@helia/unixfs": "4.0.2", - "@libp2p/bootstrap": "11.0.26", + "@libp2p/bootstrap": "11.0.20", "@libp2p/circuit-relay-v2": "3.2.2", "@libp2p/config": "1.1.0", "@libp2p/identify": "3.0.22", + "@libp2p/kad-dht": "14.2.3", "@libp2p/keychain": "5.0.14", "@libp2p/logger": "5.1.8", "@libp2p/ping": "2.0.22", @@ -30,7 +33,7 @@ "datastore-fs": "10.0.2", "glob": "7.1.6", "helia": "5.2.1", - "helia-coord": "1.9.7", + "helia-coord": "1.10.0", "jsonrpc-lite": "2.2.0", "jsonwebtoken": "8.5.1", "jwt-bch-lib": "1.3.0", @@ -1405,24 +1408,23 @@ } }, "node_modules/@helia/block-brokers": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@helia/block-brokers/-/block-brokers-4.2.4.tgz", - "integrity": "sha512-Xz7JyRIprbldi5bxfvuj5xTDijkfndgLPKoK/AUVeFOBD0n04Cb6RzqYGVQN6of8a6hfL6tD0fO4RVUFh/Jl6A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@helia/block-brokers/-/block-brokers-4.0.4.tgz", + "integrity": "sha512-J9Oh5KSMJUYg+WZCted73QfU4iAqRPXULTRSorzJ/iyFsONQwvY1nvlL8rcupt5uSi3ZHdHOBHPGagR61ZVu/A==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@helia/bitswap": "^2.2.0", - "@helia/interface": "^5.4.0", - "@helia/utils": "^1.4.0", + "@helia/bitswap": "^2.0.4", + "@helia/interface": "^5.2.0", + "@helia/utils": "^1.2.1", "@libp2p/interface": "^2.2.1", "@libp2p/utils": "^6.2.1", "@multiformats/multiaddr": "^12.3.3", - "@multiformats/multiaddr-matcher": "^2.0.1", + "@multiformats/multiaddr-matcher": "^1.6.0", "@multiformats/multiaddr-to-uri": "^11.0.0", "interface-blockstore": "^5.3.1", "interface-store": "^6.0.2", "multiformats": "^13.3.1", - "progress-events": "^1.0.1", - "uint8arraylist": "^2.4.8" + "progress-events": "^1.0.1" } }, "node_modules/@helia/delegated-routing-v1-http-api-client": { @@ -1464,16 +1466,16 @@ } }, "node_modules/@helia/routers": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@helia/routers/-/routers-3.1.3.tgz", - "integrity": "sha512-BPbzN3WCe6EF3yXjeORJbbb5hZjv0PKaJri1sSPHRZX6sKUCvRzwAc0AkQKUMHeMzTLrrAcl0yAz5x1r8z3Ynw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@helia/routers/-/routers-3.0.0.tgz", + "integrity": "sha512-WtbH+qam4YtcJfeQpteJ9o9By4TniUeltkClouoDkXpRoshjyTT0MowzpCOBRS0hS8gK3aX+kA3h1kU3qeR35Q==", "license": "Apache-2.0 OR MIT", "dependencies": { "@helia/delegated-routing-v1-http-api-client": "^4.2.1", - "@helia/interface": "^5.4.0", + "@helia/interface": "^5.2.0", "@libp2p/interface": "^2.2.1", "@libp2p/peer-id": "^5.0.8", - "@multiformats/uri-to-multiaddr": "^9.0.1", + "@multiformats/uri-to-multiaddr": "^8.0.0", "ipns": "^10.0.0", "it-first": "^3.0.6", "it-map": "^3.1.1", @@ -2009,14 +2011,14 @@ "license": "Apache-2.0 OR MIT" }, "node_modules/@libp2p/bootstrap": { - "version": "11.0.26", - "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-11.0.26.tgz", - "integrity": "sha512-Q2r3RsedwpgUv8gtsapsegs8wxGAbm2rUTjEuTK3wasQoixZ2Q6Kjw4hq+cq4SlbH3XaAO2UXqUEhGT2KLhfoQ==", + "version": "11.0.20", + "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-11.0.20.tgz", + "integrity": "sha512-ci5bdMdT29zyP0GCFsHEaQdU+0YxO6nOVl/BHDLLygvss9sXvLTM2iqO1Gg2NdOzaBg640xa55ZRE87M2H9m4Q==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.6.0", - "@libp2p/interface-internal": "^2.3.4", - "@libp2p/peer-id": "^5.0.13", + "@libp2p/interface": "^2.5.0", + "@libp2p/interface-internal": "^2.3.0", + "@libp2p/peer-id": "^5.0.12", "@multiformats/mafmt": "^12.1.6", "@multiformats/multiaddr": "^12.3.3" } @@ -2281,25 +2283,25 @@ } }, "node_modules/@libp2p/kad-dht": { - "version": "14.2.15", - "resolved": "https://registry.npmjs.org/@libp2p/kad-dht/-/kad-dht-14.2.15.tgz", - "integrity": "sha512-iARZsaKrm9LlOE0nRTsqMasYGfWbh+zw1TAMWOY/QHTszFGb9ol7FZoI9WUzoif9ltKLu3BjJpy00b8CVofCBw==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@libp2p/kad-dht/-/kad-dht-14.2.3.tgz", + "integrity": "sha512-kwHf6nClBXqEHgtaKsqZa6yXPUxBq3ZE9ySb1FNdJu+3Yl3nezHie1edWlawNcW2ET101dmCUdPRFeG8QkS5OA==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/crypto": "^5.0.15", - "@libp2p/interface": "^2.7.0", - "@libp2p/interface-internal": "^2.3.9", - "@libp2p/peer-collections": "^6.0.25", - "@libp2p/peer-id": "^5.1.0", - "@libp2p/record": "^4.0.5", - "@libp2p/utils": "^6.6.0", + "@libp2p/crypto": "^5.0.11", + "@libp2p/interface": "^2.5.0", + "@libp2p/interface-internal": "^2.3.0", + "@libp2p/peer-collections": "^6.0.17", + "@libp2p/peer-id": "^5.0.12", + "@libp2p/record": "^4.0.4", + "@libp2p/utils": "^6.5.1", "@multiformats/multiaddr": "^12.3.3", "any-signal": "^4.1.1", "interface-datastore": "^8.3.1", "it-all": "^3.0.6", "it-drain": "^3.0.7", "it-length": "^3.0.6", - "it-length-prefixed": "^10.0.1", + "it-length-prefixed": "^9.1.0", "it-map": "^3.1.1", "it-merge": "^3.0.5", "it-parallel": "^3.0.8", @@ -2312,29 +2314,12 @@ "p-event": "^6.0.1", "progress-events": "^1.0.1", "protons-runtime": "^5.5.0", - "race-signal": "^1.1.2", + "race-signal": "^1.1.0", "uint8-varint": "^2.0.4", "uint8arraylist": "^2.4.8", "uint8arrays": "^5.1.0" } }, - "node_modules/@libp2p/kad-dht/node_modules/it-length-prefixed": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-10.0.1.tgz", - "integrity": "sha512-BhyluvGps26u9a7eQIpOI1YN7mFgi8lFwmiPi07whewbBARKAG9LE09Odc8s1Wtbt2MB6rNUrl7j9vvfXTJwdQ==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "it-reader": "^6.0.1", - "it-stream-types": "^2.0.1", - "uint8-varint": "^2.0.1", - "uint8arraylist": "^2.0.0", - "uint8arrays": "^5.0.1" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@libp2p/keychain": { "version": "5.0.14", "resolved": "https://registry.npmjs.org/@libp2p/keychain/-/keychain-5.0.14.tgz", @@ -2649,16 +2634,16 @@ } }, "node_modules/@libp2p/utils": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-6.7.2.tgz", - "integrity": "sha512-yglVPcYErb4al3MMTdedVLLsdUvr5KaqrrxohxTl/FXMFBvBs0o3w8lo29nfnTUpnNSHFhWZ9at0ZGNnpT/C/w==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-6.7.1.tgz", + "integrity": "sha512-x3WImvw4unmx1ZeAedj8AkRe4UImUlkw0ZItYAiKiekElMNUXwv+Yt48dI/LmB38JIof8sng29XvUeCVU3F6OA==", "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.1.0", "@chainsafe/netmask": "^2.0.0", - "@libp2p/crypto": "^5.1.8", - "@libp2p/interface": "^2.11.0", - "@libp2p/logger": "^5.2.0", + "@libp2p/crypto": "^5.1.7", + "@libp2p/interface": "^2.10.5", + "@libp2p/logger": "^5.1.21", "@multiformats/multiaddr": "^12.4.4", "@sindresorhus/fnv1a": "^3.1.0", "any-signal": "^4.1.1", @@ -2906,9 +2891,9 @@ } }, "node_modules/@multiformats/uri-to-multiaddr": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@multiformats/uri-to-multiaddr/-/uri-to-multiaddr-9.0.2.tgz", - "integrity": "sha512-2TCQR5Y2unG2s9Jm1BdBMTSFmmfgHy8D0777PRT+U2D+IXC1E9JkKF1OS0QlHtGyKUA0IRIk8T0JV4D3v5iOyQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@multiformats/uri-to-multiaddr/-/uri-to-multiaddr-8.1.0.tgz", + "integrity": "sha512-NHFqdKEwJ0A6JDXzC645Lgyw72zWhbM1QfaaD00ZYRrNvtx64p1bD9aIrWZIhLWZN87/lsV4QkJSNRF3Fd3ryw==", "license": "Apache-2.0 OR MIT", "dependencies": { "@multiformats/multiaddr": "^12.1.14", @@ -10210,9 +10195,9 @@ } }, "node_modules/helia-coord": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/helia-coord/-/helia-coord-1.9.7.tgz", - "integrity": "sha512-EVlbg6FjpkYwVH4LRT/n/r6DQVh7opNIClYbFP2ZQqx8V9d3YE+z2d+TigvGmh0xMpIAbQtRVj+C3amPs+r35g==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/helia-coord/-/helia-coord-1.10.0.tgz", + "integrity": "sha512-aN0zO0fe2Zyctie7UAf/R48SFwa6OE+TK6AzbStI7el7ru3QfjfOX9Ksq9pg1j7DqG6zM2pfVbQjIsKD5kMTTA==", "license": "MIT", "dependencies": { "@chris.troutner/retry-queue": "1.0.10", diff --git a/package.json b/package.json index 6a638bd..29c9ac9 100644 --- a/package.json +++ b/package.json @@ -28,11 +28,14 @@ "@chainsafe/libp2p-gossipsub": "14.1.0", "@chainsafe/libp2p-noise": "16.0.1", "@chainsafe/libp2p-yamux": "7.0.1", + "@helia/block-brokers": "4.0.4", + "@helia/routers": "3.0.0", "@helia/unixfs": "4.0.2", - "@libp2p/bootstrap": "11.0.26", + "@libp2p/bootstrap": "11.0.20", "@libp2p/circuit-relay-v2": "3.2.2", "@libp2p/config": "1.1.0", "@libp2p/identify": "3.0.22", + "@libp2p/kad-dht": "14.2.3", "@libp2p/keychain": "5.0.14", "@libp2p/logger": "5.1.8", "@libp2p/ping": "2.0.22", @@ -46,7 +49,7 @@ "datastore-fs": "10.0.2", "glob": "7.1.6", "helia": "5.2.1", - "helia-coord": "1.9.7", + "helia-coord": "1.10.0", "jsonrpc-lite": "2.2.0", "jsonwebtoken": "8.5.1", "jwt-bch-lib": "1.3.0", @@ -113,6 +116,7 @@ }, "libp2p": { "@multiformats/multiaddr": "12.5.1" - } + }, + "@libp2p/utils": "6.7.1" } } diff --git a/src/adapters/ipfs/ipfs.js b/src/adapters/ipfs/ipfs.js index 5cf7704..7ca3163 100644 --- a/src/adapters/ipfs/ipfs.js +++ b/src/adapters/ipfs/ipfs.js @@ -10,6 +10,8 @@ // Global npm libraries import { createHelia } from 'helia' +import { libp2pRouting } from '@helia/routers' +import { bitswap } from '@helia/block-brokers' import fs from 'fs' import { FsBlockstore } from 'blockstore-fs' import { FsDatastore } from 'datastore-fs' @@ -17,9 +19,10 @@ import { createLibp2p } from 'libp2p' import { tcp } from '@libp2p/tcp' import { noise } from '@chainsafe/libp2p-noise' import { yamux } from '@chainsafe/libp2p-yamux' -// import { bootstrap } from '@libp2p/bootstrap' +import { bootstrap } from '@libp2p/bootstrap' // import { identifyService } from 'libp2p/identify' import { identify, identifyPush } from '@libp2p/identify' +import { kadDHT } from '@libp2p/kad-dht' import { circuitRelayServer, circuitRelayTransport } from '@libp2p/circuit-relay-v2' // import { circuitRelayServer } from '@libp2p/circuit-relay-v2' import { gossipsub } from '@chainsafe/libp2p-gossipsub' @@ -139,7 +142,11 @@ class IpfsAdapter { identifyPush: identifyPush(), pubsub: gossipsub({ allowPublishToZeroTopicPeers: true }), ping: ping(), - keychain: keychain(keychainInit) + keychain: keychain(keychainInit), + dht: kadDHT({ + protocol: '/psf/kad/1.0.0', + clientMode: false + }) } if (this.config.isCircuitRelay) { console.log('Helia (IPFS) node IS configured as Circuit Relay') @@ -191,6 +198,15 @@ class IpfsAdapter { streamMuxers: [ yamux() ], + peerDiscovery: [ + bootstrap({ + list: [ + '/ip4/78.46.129.7/tcp/4001/p2p/12D3KooWEBzgK8a5TpMfLotuj7jJnEK41gbD9LZK6qCpxNrX43E9', + '/ip4/5.78.70.29/tcp/4001/p2p/12D3KooWSREJ6x2DJSYrA1xRD2Qs6D4DHncsHmNnTHuMKHnqpG2i', + '/ip4/143.198.134.59/tcp/4101/p2p/12D3KooWHogx3RcyNiSuY6SzS8GxzTAqtDCYzy17yQ1StWaLvX9j' + ] + }) + ], services }) @@ -198,7 +214,13 @@ class IpfsAdapter { const helia = await this.createHelia({ blockstore, datastore, - libp2p + libp2p, + routers: [ + libp2pRouting(libp2p) + ], + blockBrokers: [ + bitswap() + ] }) // Attach IPFS file system.